Gitのconflict解消方法|よくあるケース別に解説

開発ツール

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を取り込む習慣をつければ、コンフリクトに遭遇する頻度自体も減らせます。