Git推送提示文件过大 删除文件后仍报错无法推送问题咨询
问题核心原因
你删除本地文件、配置.gitignore、接入Git LFS后仍然推送失败,核心原因是182.47MB的file.csv已经存在于当前待推送的提交历史中。GitHub的预接收钩子会扫描所有待推送提交的全量文件快照,而非仅检查最新提交的工作区内容。
你执行git rm -r --cached file.csv返回路径不匹配错误,是因为该文件早已不在当前工作区和暂存区,但仍然残留在之前未推送的某一笔提交的快照里,上述操作都没有触碰到这部分历史记录。
解决步骤
方案一:全量清除提交历史中的大文件(官方推荐,适配所有场景)
使用Git官方维护的git filter-repo工具(替代老旧的git filter-branch)清理历史,操作最稳妥:
- 先确认大文件对应的提交记录,验证排查方向:
执行后会列出所有未推送的、涉及git log --oneline localbranch -- file.csvfile.csv改动的提交。 - 执行清理命令,将
file.csv从当前分支的所有提交快照中彻底移除:
若系统提示找不到该命令,Windows环境可重新运行Git安装向导勾选对应组件,或通过git filter-repo --path file.csv --invert-pathspip install git-filter-repo安装。 - 清理完成后执行强制推送即可:
git push -u origin localbranch --force
方案二:仅重写近期提交(适合确定大文件是最近几次提交误加的场景)
如果能确认file.csv是最近几笔本地提交时才不小心加入的,不需要清理更早的历史,可以用更轻量的操作:
- 先找到本地分支上一次成功推送到远程的提交哈希(例如下方示例用
abc123指代该哈希),执行软重置回到该节点:git reset --soft abc123 - 此时之前几次提交的所有改动都会回到暂存区,确认暂存区不存在
file.csv后,重新提交变更:git commit -m "提交变更,移除误添加的大文件" - 正常执行推送即可。
之前操作无效的原因说明
- 删除本地文件:仅移除工作区的文件副本,已经写入提交快照的内容不会发生任何改变
- 配置
.gitignore:仅对规则生效后新增的未追踪文件生效,已经进入提交历史的文件不受忽略规则约束 - 配置
.gitattributes接入Git LFS:仅对配置完成后新提交的文件生效,之前已经提交到历史中的大文件不会自动转换为LFS指针文件 - 执行
git rm --cached file.csv:该命令仅能操作当前暂存区已追踪的文件,文件早已不在当前暂存区时就会返回路径不匹配错误,无法清理旧提交里残留的文件。
注意:重写提交历史的操作仅适用于你个人独立使用的特性分支,不要对已经推送至远程、有其他协作者基于其开发的公共分支执行这类操作,避免影响其他人的代码同步。
内容的提问来源于stack exchange,提问作者Billy Babis
相关产品推荐
相关产品推荐

