Git push被拒提示存在已删除大文件 无法推送代码如何解决
问题原因
你本地当前工作目录已不存在该文件,是因为你在后续提交中删除了它,但该大文件仍然存在于你的本地Git历史提交记录中。推送时Git会将所有历史提交的变更同步到远端,因此触发了GitHub的单文件100MB大小限制。你执行git rm仅能删除工作目录和最新提交中的文件,无法处理已经写入历史的文件,所以会出现路径不匹配的报错。
解决方案
方案1:彻底从Git历史中删除该大文件(不需要保留该文件时推荐)
- 首先安装
git filter-repo工具,这是Git官方推荐的历史改写工具,比旧版git filter-branch更高效安全 - 执行以下命令,将该文件从所有历史提交中彻底移除:
git filter-repo --path media/CA211117.ZIP --invert-paths
注意:文件名大小写需和错误提示中的完全一致,Windows等大小写不敏感的文件系统可以额外添加
--force参数强制执行
- 改写历史完成后,执行强制推送即可:
git push origin master --force
方案2:保留该文件,使用Git LFS管理大文件
如果该文件属于项目需要保留的资源,可以用Git大文件存储功能管理:
- 执行命令将ZIP格式文件纳入LFS管理:
git lfs track "*.ZIP"
- 提交LFS追踪规则:
git add .gitattributes git commit -m "配置LFS管理ZIP大文件"
- 执行历史迁移命令,将已经提交到历史中的大文件转为LFS管理:
git lfs migrate import --include="media/CA211117.ZIP"
- 完成后强制推送即可:
git push origin master --force
注意事项
改写Git历史会修改所有相关提交的哈希值,如果有其他协作者共同使用该仓库,需要通知所有协作者拉取最新的仓库历史,避免后续提交出现冲突。
内容的提问来源于stack exchange,提问作者Rikky Bhai
相关产品推荐
相关产品推荐

