Quick answer: Always commit .meta files to source control with stable GUIDs. Don’t reorder serialized fields in prefab scripts without migrating overrides first. Use Apply Overrides to promote modifications you want preserved.

A teammate pushes a prefab edit. You pull. Every scene using a variant of that prefab now shows the prefab’s defaults — your custom overrides (different sprite, custom stats) are gone. The history shows your override values existed yesterday.

Overrides Are Tied to GUIDs and FileIDs

Each override is recorded in the scene/variant’s YAML as something like:

PrefabInstance:
  ...
  m_Modifications:
    - target: {fileID: 5523456, guid: a1b2c3..., type: 3}
      propertyPath: m_Color.r
      value: 0.5

The override targets a specific sub-object inside a prefab identified by fileID within that prefab’s guid. If either identifier changes, the override is orphaned and Unity discards it.

Causes of GUID/FileID Changes

  1. .meta files not committed: each developer’s clone generates a new GUID, breaking cross-machine references.
  2. Conflicting .meta resolution: choosing “ours” on one side and “theirs” on the other splits the GUID.
  3. Renaming a component field without a [FormerlySerializedAs]: existing overrides reference the old name, can’t reattach.
  4. Reordering sub-objects in the prefab: shifts fileIDs (rare but happens with major restructures).

Fix 1: Commit .meta Files

Your .gitignore (or equivalent) must NOT ignore .meta files. Standard Unity .gitignore template excludes them with explicit rules:

# Unity gitignore should include:
!*.meta

For projects already missing .meta in history: each user’s next pull regenerates, breaking references. Restore from the most recent known-good revision; commit those .meta files; communicate to the team.

Fix 2: Use FormerlySerializedAs

When renaming serialized fields:

using UnityEngine.Serialization;

public class Enemy : MonoBehaviour
{
    [FormerlySerializedAs("hp")]
    public int health = 100;
}

Existing overrides targeting hp migrate to health on next load. Without this, the override drops and the field reverts to the default 100.

Fix 3: Apply Overrides Before Restructure

If you’re about to do a major prefab restructure that will break some overrides, first:

  1. Open each scene referencing the prefab.
  2. For each prefab instance: right-click in Hierarchy → Apply Overrides → promote desired modifications to defaults.
  3. Now do the restructure. Surviving overrides are the ones you intentionally left as instance-specific.

Diagnosing Lost Overrides

Open the scene file in a text editor. Find PrefabInstance blocks. Check m_Modifications — should list your overrides. If empty, they were dropped on import. Compare to a known-good revision in git history to see what was lost.

Verifying

Open scenes after the fix. Verify the overrides persist (your custom values are visible, marked with the blue bar in the Inspector). Save scenes; commit. Other team members pull and verify the same on their machines.

“Prefab overrides are GUID-anchored. Lose the GUID, lose the override. Commit .meta files.”

Run a quick “list every override” editor script as a sanity check before major restructures — reveals what would be lost.