7

我有这样的 git 提交历史:

          U
         / 
A---B---C---D---E master

没有任何东西指向 commit U,但我知道它的哈希值。如何从我的存储库中完全删除此提交,就好像它从未存在过一样?我是唯一使用这个 repo 的人。

我尝试使用git rebase,但这可以删除部分分支或移动提交,但似乎无法删除单个提交。

如果我这样做了git checkout <hash>,那么git reset --hard HEAD~1我就再也看不到提交了。它实际上是完全消失了还是仍然隐藏在 repo 中?

4

2 回答 2

16

如此处所述,只需使用

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

git reflog expire --expire-unreachable=now --all删除 中所有无法访问的提交的引用reflog

git gc --prune=now删除提交本身。

注意:只有 usinggit gc --prune=now不起作用,因为这些提交仍然在 reflog 中引用。因此,必须清除 reflog。

于 2015-03-23T04:51:51.667 回答
4

最终它将被 git 清理,但您可以查看gitgc以实际强制进行垃圾收集。

clean命令是不同的,不会为您处理这个问题。

于 2012-12-11T02:12:44.243 回答