如何永久删除Git中用--allow-unrelated-histories推送的分支及孤立提交
如何清理Git仓库中的孤立提交?
没问题,当然可以删掉这些来自repo1的孤立提交!Git本身就有专门的机制处理这种不再被任何分支、标签或HEAD引用的“无主”提交,下面给你一步步说明操作方法:
第一步:先确认孤立提交的范围
先运行这个命令列出所有不被任何引用指向的对象:git fsck --unreachable输出里会包含那些来自repo1的孤立提交,你可以核对一下,确保这些就是你要清理的目标内容。
第二步:用Git垃圾回收工具清理
Git自带的git gc(garbage collection)就是干这个活的,默认会自动清理过期的孤立对象,但我们可以加参数确保彻底清除:- 先试试基础版:
git gc,它会删除默认超过两周的孤立对象。 - 如果想立刻清理所有孤立提交(不管过期时间),用这个命令:
这个命令会马上删除所有不被任何引用关联的对象,包括你刚产生的那些repo1提交。git gc --prune=now
- 先试试基础版:
如果还有残留?清理reflog记录
有时候这些孤立提交会被Git的reflog(操作历史记录)暂时引用,这时候需要先清理reflog:git reflog expire --expire-unreachable=now --all这个命令会删掉reflog中指向孤立对象的条目,之后再运行
git gc --prune=now,就能彻底清理干净了。
一些注意事项
- 这些操作都是本地仓库的操作,不会影响远程仓库。如果你的repo2已经推送到远程平台,远程的孤立提交要么等平台自动定期垃圾回收,要么联系平台管理员手动清理(大部分托管平台会自动处理)。
- 操作前一定要确认你真的不需要这些孤立提交了,因为删除之后就无法恢复了!
内容的提问来源于stack exchange,提问作者Vitalii Gozhenko
相关产品推荐
相关产品推荐

