0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

0
Posted at

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

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. 片方を残して手動で再適用★★★★
    安全で確実

アドバイス

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?