I've got a Git repository with plenty of commits that are under no particular branch, I can git show
them, but when I try to list branches that contain them, it reports back nothing.
I thought this is the dangling commits/tree issue (as a result of -D branch), so I pruned the repo, but I still see the same behavior after that:
$ git fetch origin
$ git fsck --unreachable
$ git fsck
No output, nothing dangling (right?). But the commit exists
$ git show 793db7f272ba4bbdd1e32f14410a52a412667042
commit 793db7f272ba4bbdd1e32f14410a52a412667042
Author: ...
and it is not reachable through any branch as
$ git branch --contains 793db7f272ba4bbdd1e32f14410a52a412667042
gives no output.
What exactly is the state of that commit? How can I list all commits in a similar state? How can I delete commits like those?
Note that commits referred to from your reflog are considered reachable.
Pass
--no-reflogs
to convincegit fsck
to show them to you.Once your reflog entries are expired, those objects will then also be cleaned up by
git gc
.Expiry is regulated by the
gc.pruneexpire
,gc.reflogexpire
, andgc.reflogexpireunreachable
settings. Cf.git help config
.The defaults are all quite reasonable.