Quick answer: Apply All pushes overrides from the selected instance to the shared prefab asset. Other instances now inherit the new defaults. Undo immediately if you can; otherwise restore the .prefab file from version control. Use the per-property Apply / Revert in the Overrides dropdown to control changes precisely.
Here is how to fix Unity prefabs where one playtester’s scene-instance tweak somehow rewrote the canonical prefab asset, breaking every other instance in the project. The Apply All button is one click away from the override dropdown, easy to hit accidentally, and rolls forward changes you did not mean to push. Recovery depends on whether you noticed in time.
The Symptom
You tweaked the position, color, or other property of a prefab instance in a scene to fit local needs. Other instances of the same prefab elsewhere now show that same change. The .prefab file’s last-modified timestamp matches the moment you saved.
What Causes This
Apply All clicked from the instance Overrides menu. This pushes every override from the selected instance to the prefab asset. All other instances pick up the new defaults.
Apply on a single property. Right-clicking a property and choosing Apply to Prefab does the same for that property. Easy to misclick when you meant Revert.
Editing in Prefab Mode by accident. Double-clicking a prefab instance in some workflows opens Prefab Mode editing the asset directly. Changes there always affect every instance.
Prefab variant edits. When editing a Prefab Variant, changes apply to the variant. If your “instance” was actually a Variant, changes you thought were instance-local affected anything inheriting from the Variant.
The Fix
Step 1: Undo if you just did it. Ctrl-Z (Cmd-Z) immediately after Apply reverts both the asset change and the instance state. Unity’s undo history covers this for the current editor session.
Step 2: Restore from version control if Undo is gone.
# Git: revert the prefab to the last committed version
git checkout HEAD -- Assets/Prefabs/Enemy.prefab
# Or compare to identify what changed
git diff HEAD -- Assets/Prefabs/Enemy.prefab
Unity does not keep its own asset history; version control is your only safety net.
Step 3: Use per-property Apply/Revert. Click the Overrides dropdown on the instance. Each modified field shows separately. Click Revert next to fields you do not want to keep. Apply only the ones you intentionally want to push.
Step 4: Use Prefab Variants for shared variations. If you frequently want a single instance to look different in a particular scene, make it a Prefab Variant of the base prefab. The Variant is its own asset; changes do not affect the base. Right-click the prefab in the Project view and choose Create > Prefab Variant.
Step 5: Lock the Apply button via editor script. If your team frequently misclicks Apply on critical prefabs, use a UnityEditor hook to warn:
using UnityEditor;
using UnityEditor.SceneManagement;
[InitializeOnLoad]
public static class PrefabApplyGuard
{
static PrefabApplyGuard()
{
PrefabUtility.prefabInstanceUpdated += OnPrefabApplied;
}
static void OnPrefabApplied(GameObject instance)
{
var path = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(instance);
if (path.Contains("Critical/"))
EditorUtility.DisplayDialog("Heads up",
$"Applied changes to critical prefab: {path}", "OK");
}
}
Workflow Best Practices
Inspect the Overrides dropdown before doing any Apply. Confirm only the changes you want are listed. Use Revert generously — instance-only tweaks should stay on the instance.
For prefabs that frequently need scene-specific layouts, create Prefab Variants per scene. The variant captures the variation as a new asset; the base prefab stays canonical.
“Apply All is permanent. Per-property Apply is precise. Variants are versioned variation. Pick the right tool.”
Related Issues
For nested prefab override loss, see Prefab Nested Override Lost. For variant override loss, see Prefab Variant Overrides Being Lost.
Always check the Overrides list before Apply. Revert per-property is your friend.