Object Versioning can be enabled on a bucket in order to retain
older versions of objects. When the live version of an object is deleted
or replaced, it becomes noncurrent if versioning is enabled on the
bucket. If you accidentally delete a live object version, you can
restore the noncurrent version of it back to the live version.
Object Versioning increases storage costs, but this can be partially
mitigated by configuring Object Lifecycle Management to delete older
object versions. For one possible setup, see the lifecycle configuration
example for deleting objects.
Object Lifecycle Management can be configured for a bucket, which
gives you more automated control over deleting objects. When you define
a lifecycle configuration, Cloud Storage performs a specified
action on an object only if the object meets your criteria.