小编典典

列出和删除没有分支的 Git 提交(悬空?)

all

我有一个 Git 存储库,其中包含大量不属于特定分支的提交,我可以提交git show,但是当我尝试列出包含它们的分支时,它什么也没有报告。

我认为这是悬空提交/树问题(由于 -D 分支),所以我修剪了 repo,但之后我仍然看到相同的行为:

$ git fetch origin

$ git fsck --unreachable
$ git fsck

没有输出,没有任何悬空(对吗?)。但是提交存在

$ git show 793db7f272ba4bbdd1e32f14410a52a412667042
commit 793db7f272ba4bbdd1e32f14410a52a412667042
Author: ...

并且无法通过任何分支访问,因为

$ git branch --contains 793db7f272ba4bbdd1e32f14410a52a412667042

没有输出。

该提交的具体状态是什么?如何列出处于相似状态的所有提交?我怎样才能删除这样的提交?


阅读 72

收藏
2022-08-07

共1个答案

小编典典

没有输出,没有任何悬空(对吗?)

请注意,从您的 reflog 中引用的提交被认为是可访问的。

该提交的具体状态是什么?如何列出具有相似状态的所有提交

通过--no-reflogs说服git fsck将它们展示给您。

我怎样才能删除这样的提交?

一旦您的 reflog 条目过期,这些对象也将由git gc.

到期由gc.pruneexpiregc.reflogexpiregc.reflogexpireunreachable设置控制。参照。git help config.

默认值都非常合理。

2022-08-07