Gitでコンフリクトが起きたときの対処法|原因から解決手順まで徹底解説

Gitでチーム開発や複数ブランチ運用を行っていると、**コンフリクト(競合)**は必ず発生します。
しかし、仕組みを正しく理解していれば恐れる必要はありません。
本記事では、Gitでコンフリクトが起きる原因から、実際の解決手順、再発防止のポイントまでを体系的に解説します。
Gitの基本構造を理解したい場合は、あわせて
👉 「Gitの基本と仕組みを理解する記事」 を参照すると理解が深まります。
Contents
Gitコンフリクトとは何か
コンフリクトの定義
コンフリクトとは、同じ箇所の変更内容がブランチ間で異なっているため、Gitが自動的に統合できない状態のことです。
主に以下の操作時に発生します。
git mergegit rebasegit pull
なぜ自動マージできないのか
Gitは「変更履歴」をもとに自動で統合を試みます。
しかし、
- 同じ行を異なる内容に編集している
- 片方で削除し、もう片方で編集している
といった場合、どちらを正とするか判断できません。
そのため、人間による判断が必要になります。
コンフリクトが起きる典型パターン
① 同じ行を同時に編集した場合
もっとも一般的なケースです。
例:
- mainブランチでAさんが変更
- featureブランチでBさんが同じ行を変更
- featureをmainへマージ
このとき衝突が発生します。
② 削除と編集が衝突した場合
- main:ある行を削除
- feature:その行を編集
この場合もGitは判断できません。
③ rebase時のコンフリクト
git rebaseは履歴を書き換えながら適用していくため、
途中のコミットで衝突することがあります。
mergeとの違いについては
👉 「Gitのrebaseとmergeの違いを解説した記事」 も参考になります。
実際のコンフリクト表示の見方
コンフリクトが発生すると、対象ファイルに以下のような表示が出ます。
<<<<<<< HEAD
現在のブランチの内容
=======
マージしようとしているブランチの内容
>>>>>>> feature各記号の意味
| 記号 | 意味 |
|---|---|
<<<<<<< HEAD | 現在のブランチの内容 |
======= | 区切り線 |
>>>>>>> feature | マージ対象ブランチの内容 |
この印を削除し、正しい内容だけを残します。
コンフリクト解決の基本手順
① 状態を確認する
git statusどのファイルが競合しているか確認します。
② ファイルを編集する
コンフリクトマーカーを削除し、
最終的に採用するコードだけを残します。
場合によっては、両方の変更を統合することもあります。
③ 解決済みとして追加する
git add ファイル名④ マージを完了する
git commitrebase中の場合は:
git rebase --continueこれで完了です。
GUIツールでの解決方法
VS Codeなどのエディタでは、
「現在の変更を採用」「受け入れる」「両方保持」などのボタンで直感的に解決できます。
初心者はCLIだけでなくGUIの活用も有効です。
コンフリクトを減らすための予防策
① こまめにpullする
最新のmainを取り込んでから作業することで衝突を減らせます。
git pull origin main② 作業単位を小さくする
大きな変更は衝突リスクが上がります。
小さく、頻繁にコミットすることが重要です。
コミットの基本は
👉 「Gitのコミットの仕組みを解説した記事」 を参照してください。
③ ブランチ運用ルールを明確にする
適切なブランチ戦略を採用することで衝突を抑制できます。
👉 「Gitブランチの使い方|初心者向け運用ルール解説」
👉 「一人開発でも迷わないGitブランチ運用」
コンフリクトは悪ではない
コンフリクトは「複数の変更が同じ箇所に影響を与えた」証拠です。
むしろ、Gitが安全に変更を管理していることの裏返しとも言えます。
恐れるべきなのは、
仕組みを理解せずに強引に解決することです。
まとめ
Gitのコンフリクトは、以下の流れで対応できます。
git statusで確認- マーカーを削除し正しい内容に編集
git addgit commitまたはgit rebase --continue
重要なのは、
- なぜ起きたのか理解すること
- 慌てずに差分を読むこと
- 運用ルールを整えること
これらを押さえれば、コンフリクトは確実に乗り越えられます。

