Topiqlo ロゴ

コンフリクト

公開日: 2025/06/02

コンフリクトとは?──Gitマージの衝突を正しく解決するための基本と実践

はじめに

Gitを使ってチーム開発をしていると、避けて通れないのが「コンフリクト(conflict)」です。突然現れる「マージできません」という警告に戸惑ったことのある方も多いでしょう。しかし、コンフリクトはエラーではなく、「正解が1つに決められない」状態を教えてくれるGitの仕組みです。本記事では、コンフリクトの仕組み・原因・解決手順、そして予防策までをわかりやすく解説します。

基本情報・概要

コンフリクトとは、Gitが複数の変更内容を自動でマージできず、どの変更を採用すべきか判断できない状態です。

主に以下の操作で発生します:

  • git merge
    :2つのブランチを統合するとき
  • git rebase
    :履歴を書き換えるとき
  • git cherry-pick
    :特定のコミットを別ブランチに適用するとき

コンフリクトが起きても焦らず、手動で調整すれば安全に統合できます。

比較・分類・特徴の表形式まとめ(任意)

発生場面原因の例
同じ行の変更両ブランチで同じ行が異なる内容に変更された場合
ファイルの削除+編集片方が削除、片方が編集していると「どちらを採用?」状態に
複数のコンフリクト1ファイル内に複数の競合があると修正漏れが起きやすい

コンフリクトは「Gitが困ってる」状態なので、開発者が判断してあげることが大切です。

深掘り解説

典型的なコンフリクト例:

<<<<<<< HEAD
const title = "Hello from main";
=======
const title = "Hello from feature";
>>>>>>> feature

上記は、

main
ブランチと
feature
ブランチで
title
の内容が異なっていた場合のコンフリクト表示です。

解決手順:

  1. コンフリクトのあるファイルを確認(
    git status
  2. エディタで
    <<<<<<<
    ,
    =======
    ,
    >>>>>>>
    のブロックを修正
  3. 解決後に
    git add ファイル名
  4. 最後に
    git commit
    で解決済みとして確定

VS Code などのGUIエディタを使えば、視覚的に「どちらの変更を採用するか」を選択できます。

応用・発展的な使い方

  • コンフリクトが頻発するファイルを分割・モジュール化する
  • Gitの差分ツール(
    git mergetool
    ,
    diff3
    など)の活用
  • git rerere
    (REuse REcorded REsolution)による自動解決の再利用
  • コミット粒度を小さくして原因を特定しやすくする

コンフリクトは設計とコミュニケーションによって**予防可能な「開発の副作用」**でもあります。

よくある誤解と注意点(任意)

  • 「コンフリクト=誰かがミスした」ではない:同時に開発していれば自然に起きうる
  • 放置するとどんどん解決が面倒に:できるだけ早めに修正すべき
  • force push で無理やり上書きしない:チームの履歴を壊す可能性がある
  • 自動生成ファイルの競合:ビルド成果物は競合を起こしやすいため
    .gitignore
    すべき

コンフリクトは「悪」ではなく、コードを融合するチャンスでもあります。

まとめ

コンフリクトは、Gitを使った開発におけるごく自然な現象です。正しく理解し、落ち着いて対応できれば、むしろコードレビューや設計を見直す好機となります。まずは基本的な解決フローを身につけ、エディタやツールを活用しながら、コンフリクトと仲良くなる習慣をつけていきましょう。