Gitのコンフリクトは、複数人開発で必ず遭遇する場面です。一見ややこしく見えますが、解消のパターンを覚えれば落ち着いて対応できます。本記事では、Gitコンフリクト解消の手順とよくあるケース別の対処法を解説します。
コンフリクトとは
同じファイルの同じ箇所を、複数のブランチがそれぞれ編集した時に発生します。Gitが自動的に統合できないため、人間が判断する必要があります。
コンフリクト発生時の表示
<<<<<<< HEAD
こちらが現在のブランチの変更
=======
こちらがマージ/リベース対象の変更
>>>>>>> feature
解消の基本手順
- 1.
git statusでコンフリクト中のファイルを確認 - 2. エディタでファイルを開き、競合マーカーを編集
- 3.
git add 該当ファイルでステージング - 4.
git commit(mergeの場合)またはgit rebase --continue(rebaseの場合)
よくあるケース別対処
1. 同じ行を双方で編集
どちらの変更を採用するか、または両方をマージするかを判断して書き直します。マーカーを必ず削除します。
2. 片方で削除、片方で編集
# 残す場合
git add path/to/file
# 削除を採用する場合
git rm path/to/file
3. lockファイル・自動生成物
package-lock.jsonやyarn.lockのコンフリクトは、解消後にnpm install等で再生成して整合性を取ります。
取り消し方
git merge --abort
git rebase --abort
git cherry-pick --abort
ツールの活用
- VS Codeの内蔵マージエディタ
- GitHub DesktopやSourcetreeの3ペインビュー
git mergetoolで外部ツール起動
予防策
- こまめにmainを取り込む(rebase or merge)
- 大きなブランチを長期間放置しない
- 同一ファイルの同一箇所を複数人が触らないようタスク分担
- フォーマッタを統一して見た目の差分を減らす
まとめ
コンフリクトは怖がらず、status→マーカー解消→add→commit/continueの流れを身につければ落ち着いて対処できます。日常的にmainを取り込む習慣をつければ、コンフリクトに遭遇する頻度自体も減らせます。