コンフリクト(衝突)と解決
1. コンフリクトとは?
同じファイルの同じ部分を、複数の人が別々に変更してしまったときに起こる「衝突」
のことです。
なぜ起きるのか?
例:Aさんが Player.cs の「ジャンプ力」を 10 → 15 に変更してGitHubに上げた
その間にBさんが同じ Player.cs の「ジャンプ力」を 10 → 12 に変更してから最新を取ろうとした
このときGitは「どっちの変更を採用すればいいかわからない」と判断し、コンフリクトを発生させます。SourceTreeでは、ファイルの横に赤いマークや「Conflicted」と表示されます。
2. コンフリクトが起きたときの見た目(コードの中)
コンフリクトが発生したファイルを開くと、次のような記号が自動で入ります:
<<<<<<<HEAD
ジャンプ力 = 15; // 自分の変更(または現在のブランチ)
=======
ジャンプ力 = 12; // 相手の変更(取り込もうとした変更)
>>>>>>> 相手のコミット名
- <<<<<<< HEAD ~ ======= まで → 自分側の変更
- ======= ~ >>>>>>> まで → 相手側の変更
この記号ごと残っている状態では、Unityで正常に動かなくなります。
必ず手動で直す必要があります。
3. SourceTreeでのコンフリクト解決手順(初心者向け)
手順① コンフリクトが起きていることを確認SourceTreeを開く
「ワークスペース」や「ファイルステータス」を見る
赤いアイコンや「Conflicted」と表示されているファイルを確認
手順② ファイルを開いて中身を確認・修正コンフリクトしているファイルをダブルクリック(または右クリック → 「エクスプローラーで表示」など)
Visual StudioやVS Code、メモ帳などで開く
<<<<<<< ======= >>>>>>> の記号を見ながら、最終的に残したい内容だけを残す
例:ジャンプ力を15にしたい場合
// 修正前
<<<<<<< HEAD
ジャンプ力 = 15;
ジャンプ力 = 12;
>>>>>>> 相手のコミット
// 修正後(記号を全部消す)
ジャンプ力 = 15;
両方の変更を活かしたい場合も可能です(例:ジャンプ力は15、別のパラメータは相手の値を使うなど)。
手順③ 修正したことをSourceTreeに伝える(マーク・アズ・リゾルブド)
- SourceTreeに戻る
- 修正したファイルを選択
- 右クリック → 「解決済みとしてマーク」(Mark as Resolved) をクリック
(または上部の「解決済み」ボタン)
これでコンフリクト状態が解除されます。
手順④ コミットする
- ステージングエリアにファイルが入っていることを確認
- コミットメッセージを書いて「コミット」
- 必要に応じて「プッシュ」してGitHubに上げる
これで解決完了です!
4. よくある注意点・コツ
| ポイント | 説明 |
|---|---|
| UnityのシーンやPrefabで起きやすい |
.unity や .prefab ファイルは中身が複雑なので、コンフリクトすると手動修正が難しいです。できるだけ同じファイルを同時に触らないようにしましょう。 |
| テキストファイルは直しやすい | スクリプト(.cs)は比較的直しやすいです。 |
| 迷ったら相手に確認 | 「どっちの変更を残す?」とチャットで確認するのが一番安全です。 |
| バックアップを取る | 不安なときは、修正前にファイルをコピーしておきましょう。 |
| ツールを使う方法もある | SourceTreeには「外部マージツール」を設定できますが、初心者はまず手動修正で十分です。 |
5. コンフリクトをできるだけ減らす方法
- 作業前に必ず「プル」(最新を取得)する習慣をつける
- 同じファイルを長時間編集しない(小まめにコミット&プッシュ)
- シーンやPrefabは「誰が触るか」をチームで決めておく
- 大きな変更をする前に「今からこのファイル触るね」と連絡する
まとめ
- コンフリクト = 同じ場所を別々に変更して衝突した状態
- 解決方法は「ファイルを開いて正しい内容だけ残す → 解決済みにする → コミット」
- SourceTreeならマウス操作だけでほとんど進められます
最初は少し緊張しますが、慣れると「あ、コンフリクトきたな」程度で落ち着いて対応できるようになります。
実際に一度起こしてみて(わざと同じファイルを変更して練習すると)理解が深まりますよ。
シーン(.unity)やプレハブ(.prefab)のコンフリクト
1. なぜシーン・プレハブのコンフリクトは厄介なのか?
ファイルの中身が「YAML形式」のテキストですが、オブジェクトのIDや参照関係がたくさん書かれています。
同じオブジェクトを少し動かしただけでも、大量の行が変更されます。
手動で直そうとすると、どこを残すべきかわかりにくく、壊れたシーンになりやすいです。
そのため、スクリプトのコンフリクトより慎重に対応する必要があります。
2. 基本の心構え(最重要)
「同じシーン・同じプレハブを、同時に複数人で編集しない」
これが一番の対策です。作業前に「今からTitleScene触るね」とチームで連絡する
シーンごとに担当を分ける
大きな変更が終わったらすぐコミット&プッシュする
作業開始前に必ずPULLする
これだけで、ほとんどのコンフリクトを防げます。
3. コンフリクトが起きてしまった場合の対処法
状況に応じて、次の方法を選びます。
方法① どちらかの変更を優先する(簡単・初心者向け)
「自分の変更を残す」または「相手の変更を残す」を選ぶ方法です。
-
SourceTreeでの手順コンフリクトしているシーン/プレハブを選択
-
右クリック
-
次のどちらかを選ぶ
「Ours を使用」(自分の変更を残す)
「Theirs を使用」(相手の変更を残す) -
「解決済みとしてマーク」
-
コミットする
向いているケース
片方の変更がほぼテスト用で捨ててもいい場合
相手の変更を優先して、自分の変更を後から作り直す場合
注意
選ばなかった方の変更は消えます。必要な変更があった場合は、後で手動でやり直す必要があります。
方法② 片方を残して、もう片方の変更を手動で再適用する(現実的で安全)
チームでよく使われる現実的な方法です。とりあえず「Ours」か「Theirs」で片方を残す
解決済みにしてコミット
Unityでシーン/プレハブを開く
消えてしまった変更を、記憶や相手に確認しながら手動でやり直す
メリット
壊れたファイルを無理に直そうとしないので安全
結果が確実
コンフリクト後に必ずやること
どの方法を選んでも、最後に必ず以下を行ってください。
- Unityでそのシーン/プレハブを開く
- エラーが出ていないか確認
- HierarchyやInspectorの状態が正しいか目視確認
- 必要ならPlayモードで動作確認
- 問題なければコミット&プッシュ
まとめ:優先順位
- そもそも同時編集しない★★★★★
最大の予防策 - Ours / Theirs で片方を残す★★★★
初心者に最も簡単 - 片方を残して手動で再適用★★★★
安全で確実
アドバイス
シーンやプレハブのコンフリクトは「起きてから直す」より「起こさない」
チーム内で「シーン編集中は声をかける」ルールを作るだけでも、かなりトラブルが減ります。