我有一个像这样的 git 树
A---B---C topic
/
D---E---F---G master <--
我想删除主题及其上的所有对象。
我记下主题的 SHA ID,然后键入:
git branch -D topic
git gc # <-- I also tried prune here...
git checkout -b temp <SHA1 ID of topic>
在最后一条命令之后,我希望得到一个错误(类似于“不存在的对象 ID...”或类似的东西)。但是没有错误,gitk 显示了与上面相同的树结构??
我错过了什么 - 我认为 gc/prune 应该删除所有无法访问的对象?
最佳答案
仅 gc prune 通常不足以删除 repo 中的额外对象。如果在 reflog 中仍然引用提交,它不会认为这些对象不可访问,因此可以进行修剪。
这是对我有用的:
git reflog expire --expire=now --all
git gc --aggressive --prune=now
git repack -a -d -l
这将对您的 repo 历史进行一些更改,如果其他人依赖于您删除的分支,则可能会造成困难。
您可能必须重新克隆您的存储库才能真正看到其大小的差异。
关于git - 如何真正删除一个 git 分支(即删除它的所有对象/提交)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2882375/