サイトアイコン プログラマー(PG)・システムエンジニア(SE)になるための入門講座

コンフリクトとは?Git初心者向けに原因や解決方法をわかりやすく解説

コンフリクトとは?Git初心者向けに原因や解決方法をわかりやすく解説

コンフリクト(Conflict)とは、Gitで複数の変更内容を自動で統合できない状態のことです。

チーム開発では複数人が同じファイルを編集することが珍しくありません。その結果、Gitが「どちらの変更を採用すればよいか判断できない」場合にコンフリクトが発生します。

「エラーなの?」「どうやって直せばいいの?」と不安になる初心者も多いですが、コンフリクトはGitを使った開発ではよくある出来事です。この記事では、原因や確認方法、具体的な解決手順までわかりやすく解説します。

コンフリクトとは?

コンフリクト(Conflict)は、日本語では「競合」や「衝突」という意味があります。

Gitでは、同じファイルの同じ箇所を複数人が変更し、自動でマージできなくなった状態を指します。

項目 内容
正式名称 Conflict
日本語の意味 競合・衝突
発生する場面 マージ、Pull、Rebaseなど
原因 同じ箇所を複数人が変更した

コンフリクトはなぜ発生するのか

Gitは異なる箇所の変更であれば自動的に統合できます。

しかし、同じ行や同じ設定値を別々の人が変更すると、どちらを採用すべきか判断できません。

そのため、Gitは自動で処理せず、人が内容を確認して決定するよう求めます。

コンフリクトが発生する代表的な場面

具体例

例えば、同じ「config.txt」の1行目を2人が編集した場合です。

開発者A 開発者B
Server=Server01 Server=Server02

Gitはどちらが正しい設定なのか判断できないため、コンフリクトが発生します。

IT現場での利用例

システム開発

同じプログラムを複数人で修正した際によく発生します。

PowerShellスクリプト

社内SEが同じ運用スクリプトを編集した場合にも発生することがあります。

サーバー設定ファイル

Webサーバーやデータベースの設定ファイルを複数人で変更した際にも注意が必要です。

インフラ構成管理

TerraformやAnsibleなどの構成管理ファイルでもコンフリクトは発生します。

GUIで確認する方法

Visual Studio CodeやGitHub Desktopでは、コンフリクトが発生したファイルが分かりやすく表示されます。

  1. 対象ファイルを開く
  2. 変更内容を比較する
  3. どちらの変更を採用するか選択する
  4. 保存してコミットする

Visual Studio Codeでは「現在の変更を採用」「受信した変更を採用」「両方を採用」といった選択肢が表示されるため、初心者でも対応しやすくなっています。

CUI(コマンド)で確認する方法

状態を確認する

git status

コンフリクトが発生しているファイルを確認できます。

変更内容を確認する

git diff

競合している箇所を確認できます。

マージを続行する

git add ファイル名

git commit

修正後にコミットするとマージが完了します。

マージを中止する

git merge –abort

マージ前の状態へ戻せます。

確認結果の見方

表示内容 意味
CONFLICT 競合が発生
Unmerged paths 未解決の競合がある
both modified 両方で同じファイルを変更

競合マーカーとは

コンフリクトが発生すると、Gitはファイル内へ競合マーカーを挿入します。

「<<<<<<<」「=======」「>>>>>>>」で囲まれた部分が競合箇所です。

内容を確認して不要な行を削除し、正しい内容だけを残します。競合マーカーを残したままコミットしないよう注意しましょう。

業務でよくあるトラブル

トラブル 原因
コンフリクトを解決できない 変更内容が理解できない
誤った内容を残した 確認不足
コンフリクトが何度も発生する 長期間ブランチを更新していない
ビルドエラーになった 競合マーカーを削除していない

原因の切り分け

コンフリクトが発生した場合は、次の順番で確認しましょう。

  1. どのファイルで発生したか確認する
  2. どのブランチ同士をマージしたか確認する
  3. 変更内容を比較する
  4. どちらを採用すべきか確認する
  5. テストを実施する

影響範囲を確認する

設定ファイルや共通ライブラリでコンフリクトが発生した場合は、システム全体へ影響する可能性があります。

初心者がやりがちなミス

業務で上司へ報告するポイント

例:「feature/loginをmainへマージする際にconfig.iniでコンフリクトが発生しました。設定値の違いを確認中です。現在は本番環境への影響はありません。」

エスカレーションするタイミング

実務で役立つポイント

現場では、長期間ブランチを放置しないことがコンフリクトを減らす重要なポイントです。

作業期間が長くなるほど、ほかのメンバーの変更との差が大きくなり、競合が発生しやすくなります。こまめに最新の変更を取り込み、小さな単位でマージすると、解決しやすくなります。

関連するIT用語

よくある質問(FAQ)

コンフリクトはエラーですか?

システム障害ではありません。Gitが自動で判断できないため、人による確認が必要な状態です。

コンフリクトは必ず発生しますか?

いいえ。異なる箇所を編集している場合は、多くの場合、自動でマージされます。

コンフリクトを避ける方法はありますか?

最新の変更を定期的に取得し、長期間ブランチを放置しないことが効果的です。また、同じファイルを複数人で同時に編集しないよう調整することも有効です。

分からない場合はどうすればよいですか?

設定ファイルや重要なプログラムで発生した場合は、自己判断で解決せず、変更した担当者やレビュー担当者へ相談しましょう。

まとめ

コンフリクトは、Gitが変更内容を自動で統合できない場合に発生する競合です。チーム開発では珍しいことではなく、適切な確認と対応を行えば解決できます。

初心者は、「どのファイルで競合が発生したのか」「どちらの変更を採用するべきか」を確認し、修正後は必ずテストを実施することを意識しましょう。落ち着いて原因を切り分けることが、安全なマージにつながります。

モバイルバージョンを終了