从git存储库中删除未引用的提交
我有这样的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
U
/
A---B---C---D---E master
没有任何东西指向commitU
,但我知道它的散列。如何从存储库中完全删除此提交,就好像它从未存在过一样?我是唯一使用回购协议的人
我尝试使用了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:不会,它们不会被克隆