GitHub上でConflict解消時に差分が逆マージされてしまう現象について

2019年11月2日

今回はGitHub上でConflict解消時に差分が逆マージされてしまう現象についてご紹介いたします。



GitHub上でConflict解消時に差分が逆マージされてしまう現象について

自分でローカルで手でマージするときは関係ない話なのですが、GitHub上でConflictを解消しようとしたときに、Conflictを直したファイルだけでなく他のファイルも差分がマージされてしまう現象が起こるようです。

具体的に説明します。
まず次のような一つだけコミットがされているリポジトリがあったとしましょう。
GitHub上でConflict解消時に差分が逆マージされてしまう現象について

次にconflictを起こさせる用のファイルをプッシュします。

ここで、feature/1というブランチを新たに切り、masterとconflictを起こさせてみます。
masterブランチでconflict用のファイルに手を加えてプッシュ、feature/1ブランチでもconflict用のファイルに別の変更を加えてプッシュします。

ここで表題の件になるのですが、feature/1で検証用のファイル(inspection.js)を新たに加えてプッシュします。
今回の実験のメインである検証用のファイル(inspection.js)に注目です。

続いてGitHub上でプルリクを投げます。
当然のことながらconflictが起きます。

GitHub上でconflictを解消します。
どちらでもいいですが今回はfeature/1ブランチに修正を合わせます。

マージを完了させます。

するとどうでしょうか、SourceTreeを見てみるとconflictを解消させたファイルであるconflict.jsだけでなく検証用のファイル(inspection.js)もマージされてしまっているのが見て取れると思います。

このように、GitHub上でconflictを解消させようとすると、マージコミットだけでなく全体の差分がマージ元に反映されてしまいます。
GitHub上でマージしたいけどマージ元のブランチはできるだけそのままにしたいときなどは不向きですね。

ちなみにGitHub上でconflictを解消させようとすると全体の差分が逆マージされてしまう現象が起きますが、ローカルで手でマージすると逆マージされてしまう現象は起きません。
conflictがなかったときも同様です。

このようなマージコミットだけでなく全体の差分が逆マージされてしまう現象を防ぐためには、conflictを起こさないかめんどくさいですがconflictをGitHub上でなくローカルで解消することが必要となります。

終わりに

今回はGitHub上でConflict解消時に差分が逆マージされてしまう現象についてご紹介いたしました。

最後までお読みいただきありがとうございます。
よろしければブログやTwitterでのシェアをお願いいたします。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。






GitHub

Posted by ちこ