コンフリクトとは?Git初心者向けに原因や解決方法をわかりやすく解説
コンフリクト(Conflict)とは、Gitで複数の変更内容を自動で統合できない状態のことです。
チーム開発では複数人が同じファイルを編集することが珍しくありません。その結果、Gitが「どちらの変更を採用すればよいか判断できない」場合にコンフリクトが発生します。
「エラーなの?」「どうやって直せばいいの?」と不安になる初心者も多いですが、コンフリクトはGitを使った開発ではよくある出来事です。この記事では、原因や確認方法、具体的な解決手順までわかりやすく解説します。
コンフリクトとは?
コンフリクト(Conflict)は、日本語では「競合」や「衝突」という意味があります。
Gitでは、同じファイルの同じ箇所を複数人が変更し、自動でマージできなくなった状態を指します。
| 項目 | 内容 |
|---|---|
| 正式名称 | Conflict |
| 日本語の意味 | 競合・衝突 |
| 発生する場面 | マージ、Pull、Rebaseなど |
| 原因 | 同じ箇所を複数人が変更した |
コンフリクトはなぜ発生するのか
Gitは異なる箇所の変更であれば自動的に統合できます。
しかし、同じ行や同じ設定値を別々の人が変更すると、どちらを採用すべきか判断できません。
そのため、Gitは自動で処理せず、人が内容を確認して決定するよう求めます。
コンフリクトが発生する代表的な場面
- ブランチをマージしたとき
- git pullで最新の変更を取得したとき
- git rebaseを実行したとき
- 同じ設定ファイルを複数人が編集したとき
- 長期間ブランチを更新していなかったとき
具体例
例えば、同じ「config.txt」の1行目を2人が編集した場合です。
| 開発者A | 開発者B |
|---|---|
| Server=Server01 | Server=Server02 |
Gitはどちらが正しい設定なのか判断できないため、コンフリクトが発生します。
IT現場での利用例
システム開発
同じプログラムを複数人で修正した際によく発生します。
PowerShellスクリプト
社内SEが同じ運用スクリプトを編集した場合にも発生することがあります。
サーバー設定ファイル
Webサーバーやデータベースの設定ファイルを複数人で変更した際にも注意が必要です。
インフラ構成管理
TerraformやAnsibleなどの構成管理ファイルでもコンフリクトは発生します。
GUIで確認する方法
Visual Studio CodeやGitHub Desktopでは、コンフリクトが発生したファイルが分かりやすく表示されます。
- 対象ファイルを開く
- 変更内容を比較する
- どちらの変更を採用するか選択する
- 保存してコミットする
Visual Studio Codeでは「現在の変更を採用」「受信した変更を採用」「両方を採用」といった選択肢が表示されるため、初心者でも対応しやすくなっています。
CUI(コマンド)で確認する方法
状態を確認する
git status
コンフリクトが発生しているファイルを確認できます。
変更内容を確認する
git diff
競合している箇所を確認できます。
マージを続行する
git add ファイル名
git commit
修正後にコミットするとマージが完了します。
マージを中止する
git merge –abort
マージ前の状態へ戻せます。
確認結果の見方
| 表示内容 | 意味 |
|---|---|
| CONFLICT | 競合が発生 |
| Unmerged paths | 未解決の競合がある |
| both modified | 両方で同じファイルを変更 |
競合マーカーとは
コンフリクトが発生すると、Gitはファイル内へ競合マーカーを挿入します。
「<<<<<<<」「=======」「>>>>>>>」で囲まれた部分が競合箇所です。
内容を確認して不要な行を削除し、正しい内容だけを残します。競合マーカーを残したままコミットしないよう注意しましょう。
業務でよくあるトラブル
| トラブル | 原因 |
|---|---|
| コンフリクトを解決できない | 変更内容が理解できない |
| 誤った内容を残した | 確認不足 |
| コンフリクトが何度も発生する | 長期間ブランチを更新していない |
| ビルドエラーになった | 競合マーカーを削除していない |
原因の切り分け
コンフリクトが発生した場合は、次の順番で確認しましょう。
- どのファイルで発生したか確認する
- どのブランチ同士をマージしたか確認する
- 変更内容を比較する
- どちらを採用すべきか確認する
- テストを実施する
影響範囲を確認する
- 対象ファイル
- 関連する機能
- 本番環境
- ほかの開発メンバー
- CI/CDパイプライン
設定ファイルや共通ライブラリでコンフリクトが発生した場合は、システム全体へ影響する可能性があります。
初心者がやりがちなミス
- 内容を確認せずに変更を採用する
- 競合マーカーを削除し忘れる
- テストを行わずにコミットする
- 変更理由を確認しない
- 分からないまま自己判断で解決する
業務で上司へ報告するポイント
- どのブランチ同士でコンフリクトが発生したか
- 対象ファイル
- 変更内容
- 影響範囲
- 対応状況
例:「feature/loginをmainへマージする際にconfig.iniでコンフリクトが発生しました。設定値の違いを確認中です。現在は本番環境への影響はありません。」
エスカレーションするタイミング
- どちらの変更を採用すべきか判断できない
- 本番環境へ影響する設定ファイルだった
- 複数ファイルで大量のコンフリクトが発生した
- システム全体へ影響する可能性がある
- マージ後に不具合が発生した
実務で役立つポイント
現場では、長期間ブランチを放置しないことがコンフリクトを減らす重要なポイントです。
作業期間が長くなるほど、ほかのメンバーの変更との差が大きくなり、競合が発生しやすくなります。こまめに最新の変更を取り込み、小さな単位でマージすると、解決しやすくなります。
関連するIT用語
- Git
- リポジトリ(Repository)
- ブランチ(Branch)
- マージ(Merge)
- コミット(Commit)
- プル(Pull)
- プッシュ(Push)
- リベース(Rebase)
- GitHub
よくある質問(FAQ)
コンフリクトはエラーですか?
システム障害ではありません。Gitが自動で判断できないため、人による確認が必要な状態です。
コンフリクトは必ず発生しますか?
いいえ。異なる箇所を編集している場合は、多くの場合、自動でマージされます。
コンフリクトを避ける方法はありますか?
最新の変更を定期的に取得し、長期間ブランチを放置しないことが効果的です。また、同じファイルを複数人で同時に編集しないよう調整することも有効です。
分からない場合はどうすればよいですか?
設定ファイルや重要なプログラムで発生した場合は、自己判断で解決せず、変更した担当者やレビュー担当者へ相談しましょう。
まとめ
コンフリクトは、Gitが変更内容を自動で統合できない場合に発生する競合です。チーム開発では珍しいことではなく、適切な確認と対応を行えば解決できます。
初心者は、「どのファイルで競合が発生したのか」「どちらの変更を採用するべきか」を確認し、修正後は必ずテストを実施することを意識しましょう。落ち着いて原因を切り分けることが、安全なマージにつながります。
