When it is genuinely too late
Garbage collection is real, and it is the end of the line.
Everything in this track has relied on unreferenced objects surviving. `git gc --prune=now` is where that stops being true: it expires the reflogs and deletes every object nothing can reach.
After that there is no reflog entry to name the commit, no dangling object for `fsck` to find, and no way back. This is the one drill designed to end with the work gone.
In practice gc runs on its own occasionally, with a two-week grace period. That is your window — generous, but not unlimited.
Commands in this lesson
git gc- Delete unreachable objects — after this, they are genuinely gone
git fsck- Check the object store, and report objects nothing points at