{"record":{"id":"b6cd92e045749e1b","repo":"Unity-Technologies/UnityCsReference","slug":"cannot-revert-added-gameobject-gameobject-is-not","errorCode":null,"errorMessage":"Cannot revert added GameObject. GameObject is not an added GameObject override on a Prefab instance.","messagePattern":"Cannot revert added GameObject\\. GameObject is not an added GameObject override on a Prefab instance\\.","errorType":"exception","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"Editor/Mono/Prefabs/PrefabUtility.cs","lineNumber":1802,"sourceCode":"\n            var actionName = \"Revert Prefab removed GameObject\";\n            var prefabInstanceHandle = PrefabUtility.GetPrefabInstanceHandle(gameObjectInInstance);\n\n            GameObject prefabInstanceRoot = GetOutermostPrefabInstanceRoot(gameObjectInInstance);\n\n            if (action == InteractionMode.UserAction)\n                Undo.RegisterFullObjectHierarchyUndo(prefabInstanceRoot, actionName);\n\n            RemoveRemovedGameObjectOverride(prefabInstanceHandle, assetGameObject);\n        }\n\n        public static void RevertAddedGameObject(GameObject gameObject, InteractionMode action)\n        {\n            if (gameObject == null)\n                throw new ArgumentNullException(nameof(gameObject), \"Cannot revert added GameObject. GameObject is null.\");\n\n            if (!IsAddedGameObjectOverride(gameObject))\n                throw new ArgumentException(\"Cannot revert added GameObject. GameObject is not an added GameObject override on a Prefab instance.\", nameof(gameObject));\n\n            ThrowExceptionIfInstanceIsPersistent(gameObject);\n\n            GameObject instance = PrefabUtility.GetOutermostPrefabInstanceRoot(gameObject.transform.parent);\n            PrefabUtility.Internal_CallPrefabInstanceReverting(instance);\n\n            if (action == InteractionMode.UserAction)\n                Undo.DestroyObjectImmediate(gameObject);\n            else\n                Object.DestroyImmediate(gameObject);\n\n            PrefabUtility.Internal_CallPrefabInstanceReverted(instance);\n        }\n\n        public static List<ObjectOverride> GetObjectOverrides(GameObject prefabInstance, bool includeDefaultOverrides = false)\n        {\n            return PrefabOverridesUtility.GetObjectOverrides(prefabInstance, includeDefaultOverrides);\n        }","sourceCodeStart":1784,"sourceCodeEnd":1820,"githubUrl":"https://github.com/Unity-Technologies/UnityCsReference/blob/225b0fbdb57cc17d094e8056b71f8314aba56f73/Editor/Mono/Prefabs/PrefabUtility.cs#L1784-L1820","documentation":"RevertAddedGameObject verifies the GameObject is an added override via IsAddedGameObjectOverride. Reverting only makes sense for additions — an original prefab child or non-prefab object has nothing to revert, so ArgumentException is thrown.","triggerScenarios":"Passing an original prefab child (present in the source), a prefab instance root, or a non-prefab scene object to RevertAddedGameObject.","commonSituations":"Confusing original children with added overrides; running revert over a selection that includes non-additions; selection logic that grabs all children of the instance regardless of override status.","solutions":["Check PrefabUtility.IsAddedGameObjectOverride(gameObject) before calling.","Build the revert list from PrefabUtility.GetAddedGameObjects(instanceRoot) to guarantee only additions.","Classify each candidate with GetPrefabOverrideStatus / added-object queries first."],"exampleFix":"// before\nPrefabUtility.RevertAddedGameObject(go, mode);\n\n// after\nif (go != null && PrefabUtility.IsAddedGameObjectOverride(go))\n    PrefabUtility.RevertAddedGameObject(go, mode);","handlingStrategy":"validation","validationCode":"if (gameObject == null) return;\nif (!PrefabUtility.IsAddedGameObjectOverride(gameObject)) return;","typeGuard":"static bool IsRevertableAddition(GameObject go) =>\n    go != null && PrefabUtility.IsAddedGameObjectOverride(go);","tryCatchPattern":null,"preventionTips":["Build the revert list from PrefabUtility.GetAddedGameObjects(instanceRoot).","Check IsAddedGameObjectOverride for every candidate before reverting.","Do not run revert over arbitrary children; classify override status first."],"tags":["prefab","unity","override","validation"],"backgroundTag":null,"analyzedSha":"225b0fbdb57cc17d094e8056b71f8314aba56f73","analyzedAt":"2026-08-13T19:07:19.849Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}