跳到正文
Qiita · Unity 开发社区· 来源· kurisaka_konabe·· 5 小时前AI 评分1

Unity开发中如何使用SourceTree解决版本控制冲突

Unityでソースツリーを使ってバージョン管理する3(コンフリクト対策)

正文 · 原文

コンフリクト(衝突)と解決

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に伝える(マーク・アズ・リゾルブド)

  1. SourceTreeに戻る
  2. 修正したファイルを選択
  3. 右クリック → 「解決済みとしてマーク」(Mark as Resolved) をクリック
    (または上部の「解決済み」ボタン)

これでコンフリクト状態が解除されます。

手順④ コミットする

  1. ステージングエリアにファイルが入っていることを確認
  2. コミットメッセージを書いて「コミット」
  3. 必要に応じて「プッシュ」して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モードで動作確認
  • 問題なければコミット&プッシュ

まとめ:優先順位

  1. そもそも同時編集しない★★★★★
    最大の予防策
  2. Ours / Theirs で片方を残す★★★★
    初心者に最も簡単
  3. 片方を残して手動で再適用★★★★
    安全で確実

アドバイス

シーンやプレハブのコンフリクトは「起きてから直す」より「起こさない」
チーム内で「シーン編集中は声をかける」ルールを作るだけでも、かなりトラブルが減ります。

来源:Qiita · Unity 开发社区 · qiita.com