我有一些由git subtree
创建的提交,我想进行垃圾回收(更多是为了理解可以回收什么和为什么可以回收,而不是出于实际目的)。
我已经检查过这些提交,并没有被以下方式引用:
# In any reflog
> git reflog --all --no-abbrev-commit | grep <hash>
(no output)
# In any branch, local or remote
> git branch --contains <hash>
(no output)
> git branch -r --contains <hash>
(no output)
# In any tag
> git tag --contains <hash>
(no output)
# In the current index
> git rev-list HEAD | grep <hash>
(no output)
# In references from filter-branch
> ls .git/refs/original/
(the folder does not exist)
这些是 git gc 文档 列出的可能包含引用的地方。
即使在运行了 git gc
之后,给定的提交仍然存在。
我是否遗漏了什么?或者是否有任何 git 管道命令可以检查所有这些引用?
repack
将它们分开,然后git prune
或git gc
会妥善处理它们。 - Maic López Sáenzgit prune
,我的代码库仍然有松散的对象。如果你遇到这种情况,git gc
文档指出它会尽最大努力保持安全,并保留任何可能的引用。请确保清理/refs
、/logs
、FETCH_HEAD
和其他可能在.git
文件夹中找到的缓存。然后重新运行git gc --prune=now
就可以解决问题了。 - jsgoupil