已删除并强制推送的对象仍在其他开发者机器显示的问题
问题原因与解决方法
问题出在其他开发者的本地仓库中仍保留着旧历史的引用痕迹(比如本地分支、标签、stash、reflog记录等),这些引用会让Git判定被删除的大文件Blob仍有存在价值,因此普通的git gc或git prune无法清理它们。
解决步骤:
- 清理本地旧分支与标签
- 删除所有基于旧历史的本地分支:
git branch -D <旧分支名称>,若不确定哪些分支无效,直接重新克隆仓库是最稳妥的方案 - 同步远程删除的标签并清理本地标签:
git fetch origin --prune --prune-tags,再手动删除残留的本地标签:git tag -d <标签名>
- 删除所有基于旧历史的本地分支:
- 清理stash与reflog
- 清空所有stash(若旧stash包含大文件):
git stash clear - 强制过期所有reflog记录:
git reflog expire --expire=now --all
- 清空所有stash(若旧stash包含大文件):
- 彻底清理无用Git对象
- 执行深度垃圾回收:
git gc --prune=now --aggressive
- 执行深度垃圾回收:
- 验证结果
- 再次运行
git-filter-repo --analyze确认大文件已被移除
- 再次运行
内容的提问来源于stack exchange,提问作者Alex from Jitbit
相关产品推荐
相关产品推荐

