【GitHub】コンフリクトの解決方法について
GitHub、プルリクエストの確認が終わりいざマージしようと思った瞬間に、こんなメッセージが表示されマージできない時があります。
いわゆる『コンフリクト』というやつですね。今日はこのコンフリクトの解決方法を記載したいと思います。
コンフリクトとは?
例えばこんな状況です
・AさんとBさんの2人で開発をしている
・Aさんは「topic-A」というブランチ、Bさんは「topic-B」というブランチで作業している
・AさんとBさん、ブランチは別だが同じファイル「sample.html」というファイルを編集している
・Aさん、Bさん両方プルリクエストを送信
この時に、同じファイルが別の修正がかかってしまっています。この状態をコンフリクトと呼びます。
GitHubより解決する:コンフリクトの確認方法
今回はGitHubより解決する方法を記載します。コンフリクトを起こしているプルリクのページより、「Resolve conflicts」をクリックします。
すると、下記のような画面が表示されます。
少し詳しく見ていきます。
左カラム
コンフリクトを起こしているファイルが一覧で表示されます。今回は4ファイルがコンフリクトを起こしているようです。
右カラム
左カラムで選択したファイルのソースが表示されます。こちらの画面からソースの編集ができます。
コンフリクト部分の説明
それでは実際に修正方法を説明します。
先ほどの右カラムソースの部分を見ると、下記のように書かれている箇所があると思います。
<<<<<<< topic-A
topic-Aではここに記載しました。
=======
topic-Bではこちらに記載しました。
>>>>>>> master
このように
<<<<<<<
=======
>>>>>>>
といった見覚えのない記号が表示されています。こちらがGitがコンフリクトを起こしている箇所を教えてくれている記号です。
今回でいうと、『<<<<<<< 〜 =======』の間に記載されている箇所がAさん修正した箇所で
<<<<<<< topic-A
topic-Aではここに記載しました。
=======
『======= 〜 >>>>>>>』の間に記載されている箇所がBさんが修正された箇所になります。
(この場合、Bさんのファイルはすでにマージされています。)
=======
topic-Bではこちらに記載しました。
>>>>>>> master
こちらを正しい修正に直していきます。
ファイルの修正
それではファイルを修正していきます。先ほど見たこちらのソースを修正します。
<<<<<<< topic-A
topic-Aではここに記載しました。
=======
topic-Bではこちらに記載しました。
>>>>>>> master
今回、もしAさんBさんどちらの修正も追記したいという場合は、記号部分だけ削除し下記のように記載すればOKです。
topic-Aではここに記載しました。
topic-Bではこちらに記載しました。
修正したら、画面右上の「Mark as resolved」をクリックします。
すると、コンフリクトが解消されて左サイドバーの修正したファイルにチェックマークが表示されます。
この作業を全ファイル分行います。(今回だと4ファイル)
全てのファイルを修正すると、右上に「Commit merge」というボタンが表示されます。
こちらをクリックすることで、マージできるようになります。クリックするとプルリクのページに遷移しますので、マージボタンの箇所を見てみるとマージできるようになっています。
これで、「Merge pull request」をクリックしてマージ完了となります。
読んでいただきありがとうございます。