Easy way to handle pooled prefabs?

Object pooling is really useful for prefabs that you need to instantiate many times. However, one benefit in using Instantiate is it ensures that your prefab is in a default state.

I’m using a prefab object pool at the moment that makes sure that the prefab has an IResettable component (i.e. so I can reset it to its initial state on Release). However, I frequently forget to reset certain parts of the prefab. Is there a better way to reset the pooled prefabs to their initial states from the original prefab? Is there a kind of “InstantiateOverwrite” method that could overwrite the data without allocating memory?

Personally i would use C# reflection to do this.
First of all, i would return the initially pooled instances in a FIFO manner (first in first out) , that way i return all the “unused” prefabs first (since those have the “default” values).
Then as soon as i’m done with those and i have to recycle used ones, i would just bulk reset all the used instances using reflection , just iterate over all the fields of every component and copy the values from the source prefab.
If that operation causes a hiccup in the FPS , you can do it over multiple frames or during loading screens