【问题标题】:How to clean up git commits that are not the HEAD of any branch or tag?如何清理不是任何分支或标签的 HEAD 的 git 提交?
【发布时间】:2019-11-29 17:29:50
【问题描述】:

我们经常在我们的 git 存储库上使用rebaseamend 和其他操作,这些操作创建了许多“未使用”或中间提交。

更正式地说,未使用的提交是那些满足所有这些条件的提交:

  • 他们确实没有有任何子提交并且
  • 他们不是任何分支(本地或远程)的HEAD
  • 它们不是任何标签(本地或远程)的HEAD

是否有一种简单的方法可以 (1) 识别此提交列表并 (2) 永久删除它们?

谢谢!

【问题讨论】:

  • 你急着放弃它们吗?通常这些对象会在一段时间后被垃圾收集,因为即使没有指向它们的分支/标签,也有其他指针仍在使用它们......一段时间(如 reflog 引用)。无论如何,您可以使用git gc --aggresive --prune=now,但请查看git help gcgit-scm.com/docs/git-gc

标签: git


【解决方案1】:
git fsck --unreachable

将显示在运行git prune 时将被删除的无法访问的提交。你可以调用

git prune

手动移除所有悬空物体。

通常 git 垃圾回收会在一段时间后自动为您处理。根据this answergit gc 运行:

  • git-prune
  • git-reflog
  • git-repack
  • git-rerere

git prune 可能会完成您需要的大部分清洁工作。您还可以使用更严格的参数手动调用git gc,例如:

git gc --aggresive --prune=now

但请务必阅读documentation 以便调整此命令以适合您的确切用途。

【讨论】:

    猜你喜欢
    • 2017-01-31
    • 2019-04-13
    • 2011-12-24
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 2019-08-03
    • 2012-05-02
    • 1970-01-01
    相关资源
    最近更新 更多