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