Listing and deleting Git commits that are under no branch (dangling?)

branch, git, git-dangling

Solution

No output, nothing dangling (right?)

Note that commits referred to from your reflog are considered reachable.

What exactly is the state of that commit? How can I list all commits with similar state

Pass `--no-reflogs` to convince `git fsck` to show them to you.

How can I delete commits like those?

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`, and `gc.reflogexpireunreachable` settings. Cf. `git help config`.

The defaults are all quite reasonable.

Problem

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?

Original source

Related problems