プルリクした時にコンフリクトした場合の対応方法
先日プルリクエストしたら
This branch has conflicts that must be resolved
と警告が出ました。
こちらはファイルがコンフリクトを起こしている時のメッセージのようです。
簡単に言うと、同じファイルをAさんとBさんの2人で編集してしまい、先にAさんが編集終わってマージした後に、Bさんがマージしようとするとこのメッセージが出ます。
例えば
元のファイル:
<?php
print "おはようございます。"
?>
と言うファイルがあったとして
Aさんが修正したファイル:
<?php
print "おはようございます。今日も頑張りましょう!"
?>
とAさんが修正してマージした後に
Bさんが修正したファイル:
<?php
print "おはようございます。良い天気ですね!"
?>
と修正したファイルをBさんがマージしようとすると、Git側で「コンフリクトを起こしているぞ!」というメッセージを表示してくれます。
今回は私がBさんの立場ですね。さてどうしたもんか。
--- Git ---
コマンドラインで修正する
ということで今回は、コンフリクト起きた際にコマンドラインで修正する方法を記載しようと思います。
先ほどのプルリクエスト の画面の中に、「command line instructions」というリンクがあります。
こちらをクリックすると、コマンドラインでの対応方法が表示されます。
こちらを参考に対応していきます。
今回は「issue01」というブランチを「master」にマージすることを目的とします。
準備
まずは「issue01」にチェックアウトします。
git checkout issue01
Step1を実行
GitHubのプルリクエスト ページにに記載されているStep1を実行します。
git fetch origin
git checkout -b issue01 origin/issue01
git merge master
※2行目の「git checkout -b issue01 origin/issue01」は特にやらなくても問題なかったです。(すでに存在するからだと思います。)
git marge master で、コンフリクトが起きているファイルが表示されます。
コンフリクトが起きているファイルを修正
指摘されたファイルを開くと、
<<<<<<< HEAD
ここに変更したもの
=======
ここはmasterのもの
>>>>>>> master
のような形で表示されている箇所がありますので、こちらを修正します。
コミットする
修正完了しましたら、修正したファイルをコミットします。
git add .
git commit -m 'コンフリクト修正しました'
Step2 を実行
GitHubのプルリクエスト のページに戻り、Step 2を確認します。
画面記載の通り、下記実行する。
git checkout master
masterにチェックアウト。
git merge --no-ff issue01
この時にコミット画面が開きますが、「:wq」で保存して閉じてしまって大丈夫です。
すると下記のようなメッセージが表されます。
Merge made by the 'recursive' strategy.
これでプッシュ準備完了です。
git push origin master
こちらでプッシュが完了し、マージされたかと思います。
以上で対応完了です。
ということでコンフリクトの解消完了です!今回初めての作業でしたのでドキドキでしたが、以外とすんなりできました。
同じように困っている皆さんの参考になれば幸いです。
下記記事の「PR がコンフリクトした」を参考にしました。ありがとうございます!