見出し画像

【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」をクリックしてマージ完了となります。

読んでいただきありがとうございます。