Scene conflict workflow
Git で Unity scene merge conflict を安全に解決する
Unity scene conflict は単なる text conflict ではありません。安全な解決では3つの version を保存し、Smart Merge を出発点にし、object structure と reference を確認し、commit 前に Unity で結果を検証します。
Scene conflict が text だけの問題ではない理由
.unity file には GameObject、component、その他の serialized object が含まれます。fileID は component と owner を結び、GUID は外部 asset を参照し、Transform relation が hierarchy を作ります。そのため別々の YAML 行でも同じ論理構造を変更することがあります。
Order、reparenting、delete-vs-edit、prefab override は、構文的に正しい YAML でも意味が壊れる代表例です。
安全な8ステップ
- 編集を止める: conflict 中の scene を追加で save しない。
- Status を確認:
git statusで file、branch、未 commit 変更を記録する。 - Base/Ours/Theirs を保存: 3つの revision を別の一時 file に書き出す。
- 片側を早く捨てない: ours / theirs を file 全体へ即適用しない。
- UnityYAMLMerge を実行: 最初の structural merge として Smart Merge を使う。
- 意味を review: hierarchy、component、property、reference、prefab override を比較する。
- Unity で validate: Import、scene open、Console、関連 workflow を確認する。
- 限定して commit: conflict resolution と必要な meta change だけを含める。
Base、Ours、Theirs の読み方
Base は共通の開始点、Ours は現在 checkout している branch、Theirs は入ってくる branch の version です。名前は正解と不正解を意味しません。
MergeSight の透明な scene conflict review は3つの入力を Unity object として表示し、file 全体ではなく変更ごとに判断できます。
Merge 後の確認項目
- GameObject が意図せず削除、複製、rename されていないか。
- Parent-child relation と root order が正しいか。
- Component が正しい GameObject に属しているか。
- GUID / fileID reference が存在する object と asset を指すか。
- Prefab instance、source link、override が保たれているか。
- Missing Script、conflict marker、新しい Console error がないか。
重要な Play Mode / Edit Mode test も実行してください。Import できることと level の意図が正しいことは別です。
Merge を捨ててやり直すべき場合
Base/Ours/Theirs が特定できない、YAML parser が失敗する、object identity が曖昧、大量の marker を手作業で直す必要がある場合は中止します。保存した入力へ戻り、小さく再現可能な単位で解決してください。
今後の scene conflict を減らす
- 大きな level を ownership が明確な additive scene に分割する。
- 再利用する system を共有 scene から prefab へ移す。
- High-risk asset だけを lock し、並行変更を事前に共有する。
- 小さな commit と頻繁な branch sync を行う。
- Pull request と CI に scene / prefab review と validation を入れる。
よくある質問
Git の Unity scene merge conflict はどう解決しますか?
Base、Ours、Theirs を保存し、最初に UnityYAMLMerge を実行し、結果を意味ベースで review します。その後 Unity で scene、reference、hierarchy、Console を確認してから commit します。
Unity scene では ours と theirs のどちらを選びますか?
片側がもう片側を完全に置き換えると確認できる場合だけです。通常は両側に必要な変更があるため、object 単位で判断します。
UnityYAMLMerge はすべての scene conflict を解決できますか?
いいえ。Delete-vs-edit、曖昧な object identity、複雑な hierarchy change、壊れた入力には手動 decision と追加 validation が必要です。
Merge 後に scene が開くのに間違っているのはなぜですか?
構文的に正しい YAML でも、hierarchy、reference、component ownership、prefab override が意味的に誤っている可能性があるためです。
Unity の scene conflict を防ぐ方法は?
Additive scene、prefab ownership、選択的 lock、小さな commit、頻繁な sync、semantic review を組み合わせます。並行作業がある限り完全にはなくせません。
まとめ
3つの入力を保存する
Base/Ours/Theirs が decision を追跡可能にし、安全なやり直しを可能にします。
YAML ではなく構造を見る
Hierarchy、component、override、reference が実際の意味を決めます。
最後は Unity で検証する
Import、Console、test、level の意図を commit 前に確認します。