コンフリクト
公開日: 2025/06/02
コンフリクトとは?──Gitマージの衝突を正しく解決するための基本と実践
はじめに
Gitを使ってチーム開発をしていると、避けて通れないのが「コンフリクト(conflict)」です。突然現れる「マージできません」という警告に戸惑ったことのある方も多いでしょう。しかし、コンフリクトはエラーではなく、「正解が1つに決められない」状態を教えてくれるGitの仕組みです。本記事では、コンフリクトの仕組み・原因・解決手順、そして予防策までをわかりやすく解説します。
基本情報・概要
コンフリクトとは、Gitが複数の変更内容を自動でマージできず、どの変更を採用すべきか判断できない状態です。
主に以下の操作で発生します:
:2つのブランチを統合するときgit merge
:履歴を書き換えるときgit rebase
:特定のコミットを別ブランチに適用するときgit cherry-pick
コンフリクトが起きても焦らず、手動で調整すれば安全に統合できます。
比較・分類・特徴の表形式まとめ(任意)
発生場面 | 原因の例 |
---|---|
同じ行の変更 | 両ブランチで同じ行が異なる内容に変更された場合 |
ファイルの削除+編集 | 片方が削除、片方が編集していると「どちらを採用?」状態に |
複数のコンフリクト | 1ファイル内に複数の競合があると修正漏れが起きやすい |
コンフリクトは「Gitが困ってる」状態なので、開発者が判断してあげることが大切です。
深掘り解説
典型的なコンフリクト例:
<<<<<<< HEAD const title = "Hello from main"; ======= const title = "Hello from feature"; >>>>>>> feature
上記は、
main
ブランチと feature
ブランチで title
の内容が異なっていた場合のコンフリクト表示です。
解決手順:
- コンフリクトのあるファイルを確認(
)git status
- エディタで
,<<<<<<<
,=======
のブロックを修正>>>>>>>
- 解決後に
git add ファイル名
- 最後に
で解決済みとして確定git commit
VS Code などのGUIエディタを使えば、視覚的に「どちらの変更を採用するか」を選択できます。
応用・発展的な使い方
- コンフリクトが頻発するファイルを分割・モジュール化する
- Gitの差分ツール(
,git mergetool
など)の活用diff3
(REuse REcorded REsolution)による自動解決の再利用git rerere
- コミット粒度を小さくして原因を特定しやすくする
コンフリクトは設計とコミュニケーションによって**予防可能な「開発の副作用」**でもあります。
よくある誤解と注意点(任意)
- 「コンフリクト=誰かがミスした」ではない:同時に開発していれば自然に起きうる
- 放置するとどんどん解決が面倒に:できるだけ早めに修正すべき
- force push で無理やり上書きしない:チームの履歴を壊す可能性がある
- 自動生成ファイルの競合:ビルド成果物は競合を起こしやすいため
すべき.gitignore
コンフリクトは「悪」ではなく、コードを融合するチャンスでもあります。
まとめ
コンフリクトは、Gitを使った開発におけるごく自然な現象です。正しく理解し、落ち着いて対応できれば、むしろコードレビューや設計を見直す好機となります。まずは基本的な解決フローを身につけ、エディタやツールを活用しながら、コンフリクトと仲良くなる習慣をつけていきましょう。