使用git rm删除大文件后仍被Git追踪,触发GitHub大文件错误求助
问题原因及解决办法
原因
- Git会完整记录所有提交历史,
git rm仅删除当前分支最新版本的目标文件,历史提交记录里仍保留着该大文件的完整数据。推送时Git会扫描所有历史对象并打包上传,因此远程仓库依然能检测到这个超大文件。 - 错误日志中的
.pack文件是Git用于存储历史对象的打包文件,该大文件已被包含在历史打包数据中,普通删除操作无法清除。
解决办法
方法1:精准移除历史中的特定大文件(推荐)
使用官方推荐的git filter-repo工具替代旧的filter-branch,操作更稳定:
- 确保已安装
git filter-repo(部分新版Git自带,也可通过系统包管理器安装) - 执行命令彻底清除历史中的目标大文件:
git filter-repo --path MRI_augmentation/voxelmorph/previous_git/objects/pack/pack-e1d134b06d29bdb05cafe53b8f74149afa3b5e37.pack --invert-paths
- 强制推送更新后的分支到远程:
git push origin try_combine --force
方法2:批量清理所有超大小限制的文件
如果不确定还有其他大文件,可直接清理所有超过100MB的文件:
git filter-repo --strip-blobs-bigger-than 100M
执行完成后同样强制推送:
git push origin try_combine --force
方法3:使用BFG Repo-Cleaner快速清理
BFG是比git filter-repo更快的历史清理工具:
- 下载BFG工具后,在仓库根目录执行:
java -jar bfg.jar --strip-blobs-bigger-than 100M .git
- 清理本地Git缓存并推送:
git reflog expire --expire=now --all && git gc --prune=now --aggressive git push origin try_combine --force
注意事项
- 强制推送会覆盖远程分支的历史记录,若有协作成员,需通知所有人重新拉取分支,避免历史冲突。
- 后续如需管理大文件,建议使用Git LFS,将大文件纳入LFS追踪,防止再次触发大小限制错误。
内容的提问来源于stack exchange,提问作者Danny Han
相关产品推荐
相关产品推荐

