Quick answer: Apply All collapses overrides up the prefab chain. Nested prefab overrides on instances can be overwritten when you Apply at the wrong level. Use right-click > Apply to Prefab ‘[name]’ per-property to control where overrides land, and prefer Prefab Variants for designer-editable copies.

Here is how to fix Unity’s prefab system eating your nested overrides when you click Apply All. You have a Character prefab that contains a Weapon prefab. You drag the Character into a scene, change the weapon’s damage from 10 to 25 on that instance, then click Apply All on the Character prefab component. The scene instance’s damage reverts to 10. All your tweaks are gone. This happens constantly on teams that use nested prefabs and it is a recurring source of lost work.

The Symptom

What Causes This

Unity’s override model is layered. Each prefab in a nesting chain has its own layer of modifications. When you edit an instance in a scene, overrides attach to the instance. Apply All walks the chain from the instance outward, applying each override to the appropriate layer — but “appropriate” is Unity’s best guess. It is not always what you want.

Apply All is a bulk operation. It applies every override at once without letting you choose target. For a transform change on the top-level root, it applies to the top-level prefab. For a field change on a nested prefab component, it applies to the nested prefab. If two overrides exist on the same field at different layers, the outer one can overwrite the inner.

Modified-in-Instance vs Modified-in-Prefab. An override that exists only on the instance is Modified in Instance. One that exists on the nested prefab asset and also differs on the instance is layered. Applying can flatten these and lose the instance-specific value.

Prefab Variants vs regular nesting. Prefab Variants inherit from a Base and have their own override layer. Applying on a Variant instance can push overrides to either the Variant asset or the Base asset depending on where the value differs. Getting this wrong propagates changes to every Variant in the project.

Missing scripts or renamed fields. If a script on a nested prefab was renamed or a field removed, overrides referencing the old name are orphaned. Apply sometimes silently drops these.

The Fix

Step 1: Use the Overrides dropdown. Select the instance in the Hierarchy. In the Inspector, the Prefab section has three buttons at top: Open, Select, Overrides. Click Overrides to see every override on the instance organized by GameObject and component. You see blue bars for changed properties and a dropdown to Apply or Revert per-item.

Step 2: Apply per-property. Right-click the property in the Inspector (not the Overrides dropdown, the actual field) and choose “Apply to Prefab ‘CharacterBase’” or “Apply to Prefab ‘WeaponNested’”. You see the full chain and pick which layer receives the change.

For a weapon damage override that should affect only this scene instance: do not apply at all, just leave it as an instance override. For a change that should affect all Character prefabs: Apply to Prefab ‘CharacterBase’. For a change to the Weapon prefab itself: Apply to Prefab ‘WeaponNested’.

Step 3: Avoid Apply All unless you mean it. Apply All is reserved for moments when you explicitly want every override on the instance to flow back to the prefab asset. If you are editing a scene instance with mixed overrides — some scene-specific, some prefab-general — Apply All will mis-route them.

Step 4: Edit prefabs in Prefab Mode. Double-click the prefab asset in the Project window to open Prefab Mode (purple bar at the top). Changes made here edit the asset directly — no overrides, no chain confusion. For changes meant to apply to all instances, Prefab Mode is the correct workflow.

// Programmatic override management via PrefabUtility:
using UnityEditor;

void ApplyOverrideToInstance(GameObject instance, SerializedProperty prop)
{
    PrefabUtility.ApplyPropertyOverride(
        prop,
        AssetDatabase.GetAssetPath(PrefabUtility.GetCorrespondingObjectFromSource(instance)),
        InteractionMode.UserAction
    );
}

Step 5: Use Prefab Variants for designer copies. If you have a CharacterBase and want a designer to create EliteCharacter with custom weapon damage, make EliteCharacter a Variant of CharacterBase (right-click CharacterBase > Create > Prefab Variant). The Variant holds its own overrides. Scene instances of the Variant layer on top of that.

Detecting Override Loss

If you suspect overrides are vanishing, scan instances with this editor script:

using UnityEditor;
using UnityEngine;

public static class OverrideAudit
{
    [MenuItem("Tools/Dump Prefab Overrides")]
    public static void Dump()
    {
        foreach (GameObject go in Selection.gameObjects)
        {
            var mods = PrefabUtility.GetPropertyModifications(go);
            if (mods == null) continue;
            foreach (var m in mods)
            {
                Debug.Log($"{go.name}: {m.propertyPath} = {m.value}");
            }
        }
    }
}

Run before and after an Apply operation to diff what moved.

Preventing Accidental Propagation

On teams, it is common for one designer to edit a nested prefab instance and accidentally propagate the change to everyone. Solutions:

“Apply All is nitroglycerin. Use it sparingly. When in doubt, apply per-property and name the target layer.”

Recovery After Loss

Unity has no “undo apply” that crosses scene boundaries. If you applied and lost overrides, Ctrl+Z only works in the same session and scene. Your last resort is version control: check scene and prefab files before accepting the apply. If you committed the loss, git revert the .prefab and .unity files.

For related prefab issues, see Unity Prefab Revert Not Working.

Overrides dropdown first. Apply per-property. Variants for designer copies. Never trust Apply All.