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

从git存储库中删除未引用的提交,git,branch,commit,git-branch,git-rebase,Git,Branch,Commit,Git Branch,Git Rebase,我有这样的git提交历史记录: U / A---B---C---D---E master 没有任何东西指向commitU,但我知道它的散列。如何从存储库中完全删除此提交,就好像它从未存在过一样?我是唯一使用回购协议的人 我尝试使用了git-rebase,但它既可以删除分支的一部分,也可以移动提交,但似乎无法删除单个提交 如果我执行git签出然后git重置--hard HEAD~1我就看不到提交了。它实际上是完全消失了还是仍然隐藏在回购协议中?最终它将被g

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

          U
         / 
A---B---C---D---E master
没有任何东西指向commit
U
,但我知道它的散列。如何从存储库中完全删除此提交,就好像它从未存在过一样?我是唯一使用回购协议的人

我尝试使用了
git-rebase
,但它既可以删除分支的一部分,也可以移动提交,但似乎无法删除单个提交


如果我执行
git签出
然后
git重置--hard HEAD~1
我就看不到提交了。它实际上是完全消失了还是仍然隐藏在回购协议中?

最终它将被git清理,但您可以查看以强制执行垃圾收集

clean
命令与此不同,它不会为您解决此问题。

如前所述,只需使用

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是必须的。

如果我克隆了整个回购怎么办?未引用的垃圾对象也会被克隆吗?@Jawap:不会,它们不会被克隆