从Git仓库中移除无关的提交

3
我有一个代码库,其中包含来自另一个项目的一堆提交,且这些提交在当前项目中没有任何分支。它们只是显示在历史记录中彼此连接但未连接到项目中的任何分支。
因此,如果我执行git branch --contains <commit hash>,它不返回任何内容。
(我相信这些提交是在对远程gitolite3存储库进行更改并在其状态出错时进行提取时出现的。)
我想将它们从提交数据库中删除,因为它们根本不属于这里。
我尝试过git prunegit reflog expire --expire=now --expire-unreachable=now --all之前和之后,但它们不会将其删除。我还尝试了git gc,但那也没有帮助。
这似乎与完全从Git数据库中删除提交相关,但我找不到任何reflog或分支引用这些提交,以防止修剪将其删除。我不想只是去删除数据库中的对象,这似乎是一种不好的做法。
1个回答

3
另一个导致 git gc 未删除提交记录的原因是存在引用该提交记录或包含该记录的链的标签。
git tag --list # shows the tags
git tag -d <extraneous tag> # removes any such tags
git gc # then deletes the extraneous commits

这是由相关帖子“删除与分支无关的提交”提出的建议。


1
或者,使用 git tag --contains 进行检查。如果你的 Git 版本不太旧,git for-each-ref --contains <commit> 将会列出分支、标签以及其他引用。 - torek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接