ray88’s diary

お仕事で困ったとき用の自分用の覚書

Git コンフリクト(競合)の仕組み

📚 Git&GitHub目次
📖 各種目次


🔥 Gitコンフリクト(競合)の仕組み

📖 コンフリクトとは?

コンフリクト(競合)とは、複数の人が同じファイルの同じ箇所を異なる内容で変更した時に発生する問題です。Gitは「どちらの変更を採用すべきか」を自動で判断できないため、人間が手動で解決する必要があります。

🌟 コンフリクトが発生するシナリオ

1
2
3
4
初期状態
並行作業
一方がマージ
コンフリクト発生
main ブランチ
index.html
<h1>ウェルカムページ</h1>
feature ブランチ
index.html
<h1>ウェルカムページ</h1>

↓ 並行して異なる変更を実施 ↓

Aさんの変更
タイトルを変更
index.html
<h1>ホームページへようこそ</h1>
Bさんの変更
タイトルを変更
index.html
<h1>サイトへようこそ!</h1>

💥 コンフリクトの発生

Bさんが自分のブランチをmainブランチにマージしようとすると...

🚨 Gitからのメッセージ

CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result.

📝 ファイル内のコンフリクトマーカー

<html> <head><title>サイト</title></head> <body> <<<<<<< HEAD <h1>ホームページへようこそ</h1> ======= <h1>サイトへようこそ!</h1> >>>>>>> feature-branch </body> </html>

<<<<<<< HEAD: 現在のブランチ(main)の内容

=======: 区切り線

>>>>>>> feature-branch: マージしようとしているブランチの内容

🛠️ コンフリクトの解決方法

解決の手順

ステップ 1: コンフリクトマーカーを削除し、残したい内容を選択
ステップ 2: ファイルを保存
ステップ 3: git add ファイル名 で解決済みをマーク
ステップ 4: git commit でマージを完了

🎯 解決例

<html> <head><title>サイト</title></head> <body> <h1>ホームページへようこそ!</h1> </body> </html>

↑ 両方の良い部分を組み合わせた解決例

🚀 コンフリクトを避けるコツ

🔄 頻繁にpull
定期的に最新の変更を取り込む
📞 コミュニケーション
チームメンバーと作業範囲を調整
🏗️ 小さなコミット
細かく分けてコミットする
🎯 機能別ブランチ
機能ごとにブランチを分ける