为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Git
www说 2019-07-31 18:09:07
列出并删除没有分支的Git提交(悬空?)我有一个Git存储库,有很多提交,没有特定的分支,我可以git show,但当我尝试列出包含它们的分支时,它报告什么都没有。我认为这是悬挂的提交/树问题(由于-D分支),所以我修剪了回购,但之后我仍然看到相同的行为:$ git fetch origin$ git fsck --unreachable$ git fsck没有输出,没有悬空(对吧?)。但提交存在$ git show 793db7f272ba4bbdd1e32f14410a52a412667042commit 793db7f272ba4bbdd1e32f14410a52a412667042Author: ...它不能通过任何分支到达$ git branch --contains 793db7f272ba4bbdd1e32f14410a52a412667042没有输出。这个提交的状态究竟是什么?如何列出处于类似状态的所有提交?如何删除那些提交?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

没有输出,没有悬空(对吧?)

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

这个提交的状态究竟是什么?如何列出具有类似状态的所有提交

通过--no-reflogs说服git fsck向他们展示。

如何删除那些提交?

一旦您的reflog条目过期,那么这些对象也将被清除git gc

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

默认值都很合理。


查看完整回答
反对 回复 2019-07-31
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

要删除所有悬空提交以及可从reflog中访问的提交,请执行以下操作:

git reflog expire --expire-unreachable=now --allgit gc --prune=now

但请确保这是你想要的。我建议你阅读手册页,但这里是要点:

git gc删除无法访问的对象(提交,树,blob(文件))。如果某个对象不属于某个分支的历史记录,则该对象无法访问。实际上它有点复杂:

git gc 做其他一些事情,但它们在这里并不重要,也没有危险。

不会删除小于两周的无法访问的对象,因此我们使用的--prune=now方法是“删除之前创建的无法访问的对象”。

也可以通过reflog访问对象。虽然分支记录了某个项目的历史记录,但是reflog记录了这些分支的历史记录。如果你修改,重置等提交将从分支历史记录中删除,但是如果你意识到你犯了错误,git会保留它们。Reflogs是一种方便的方法,可以找出在分支(或HEAD)上执行的破坏性(和其他)操作,从而更容易撤消破坏性操作。

因此,我们还必须删除reflog以实际删除从分支无法访问的所有内容。我们通过使--allreflogs 到期来实现这一目标。git再次保留了一些reflog以保护用户,所以我们再次告诉它不要这样做:--expire-unreachable=now

由于我主要使用reflog来从破坏性操作中恢复,我通常会使用--expire=now它来完全消除reflog。


查看完整回答
反对 回复 2019-07-31
?
不负相思意

TA贡献1777条经验 获得超10个赞

我有同样的问题,仍然遵循这个线程中的所有建议:


git reflog expire --expire-unreachable=now --all

git gc --prune=now

git fsck --unreachable --no-reflogs   # no output

git branch -a --contains <commit>     # no output

git show <commit>                     # still shows up

如果它不是reflog而不是分支,...它必须是一个标签!


git tag                             # showed several old tags created before the cleanup

我删除了标签git tag -d <tagname>并重新进行了清理,旧的提交已经消失。


查看完整回答
反对 回复 2019-07-31
  • 3 回答
  • 0 关注
  • 1101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信