从git存储库中删除未引用的提交

时间:2012-12-11 01:15:11

标签: git branch commit git-branch git-rebase

我有这样的git提交历史记录:

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

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

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

如果我git checkout <hash>然后git reset --hard HEAD~1我再也看不到提交了。它实际上是完全消失还是仍然隐藏在回购中?

2 个答案:

答案 0 :(得分:8)

如上所述here,只需使用

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

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

git gc --prune=now自行删除提交。

注意:仅使用git gc --prune=now将无效,因为这些提交仍在reflog中引用。因此,清除reflog是必需的。

答案 1 :(得分:3)

最终它将被git清理,但你可以查看git gc来实际强制垃圾收集。

clean命令不同,不会为您处理此事。