我正在尝试清理存储库:
local FIRST_COMMIT="bf450342272a94117d78eae34a140a2a39359dad"
git branch -d bad-master
git remote remove bad-remote
git rev-parse ${FIRST_COMMIT} > .git/shallow
git fsck --unreachable
git gc --prune=now
想法如下:
develop
)分支develop
/ .git/shallow
在gc --prune
分支中剪切历史记录这样做之后,我已经验证了以下内容:
develop
develop
分支中的历史记录实际上已减少到指定的提交但是仍然存在问题:
git rev-list --all
列出无法通过develop
分支访问的提交!
我不明白为什么git fsck --unreachable
没有列出,为什么git gc --prune=now
没有删除那些提交。唯一的解释是,这些提交通过 other 引用是可以到达的。哪一个?
如何确定给定提交的可达性?
我期望的是:
prune
将删除不需要的提交。答案 0 :(得分:1)
使用git for-each-ref
遍历所有引用(默认是显示它们及其哈希ID和对象类型)。
请注意,git for-each-ref
仅查看引用,而不查看其对应的引用日志。在每个参考上使用git reflog
来检查(或终止)他们的参考日志。删除引用会删除其引用日志,因此,如果没有其他引用,则问题很可能是develop
的引用日志。但是,git rev-list --all
会查看所有引用,而不查看引用日志,因此我希望还有其他引用可以找到这些提交。