🫶

Gitでコンフリクトコミットを積んでコンフリクトの解消作業を履歴に積む

2024/06/07に公開

想定読者

デカいコンフリクトを解消する必要がある人

Gitのコンフリクト解消を手元で行う課題感

Gitでmergeするとコンフリクトが起きる。それを当事者ではない人が差分の意味を理解して取り込むのは難しいです。
5行くらいの差分であれば迷わないと思いますが、
50行以上のコンフリクトの差分を確認するのは難しくなってきます。

迷いながらコンフリクト解消された内容が一つのコミットにまとまっているとします。
コンフリクト解消した当事者しか解消した内容を知っている人はいません。
Gitは履歴管理を目的としたツールであるにも関わらず、コンフリクトと解消の間の履歴は残りません。
そうすると後から情報を参照することができずコンフリクトの解消で本来取り込む必要があった実装が消えてしまうこともあるでしょう。

Gitのコンフリクトの履歴を残した上でコミットを積む

そのままではありますが、作業中のブランチにmainの差分を取り込みコンフリクトしたシチュエーションで話をしてみます。

  1. git merge main # コンフリクト発生
  2. git add . && git commit -m "コンフリクトのままコミット 後続で解消コミットを積む" # コンフリクトした状態のままコミット
  3. コンフリクトの解消作業
  4. git add . && git commit -m "コンフリクト解消"

まとめ

こうすることで慣習になっている手元でコンフリクトを解消しどういう前後関係で差分を取り込んだのかわかるようになりました。
コンフリクトコミットと解消コミットで履歴を追えば他のメンバーから解消の時の内容も後から参照できることがこのやり方のメリットになります。

Discussion