Git提交超大文件后推送失败,多种操作仍无法推送求助
解决方法
核心问题是大文件file 4还留在你的提交历史里,必须彻底从历史中移除才能推送。下面给两种可靠的方案:
方案一:用git filter-repo(官方推荐,彻底高效)
这个工具能一次性清除所有提交历史里的指定文件,步骤如下:
- 确保你已经备份好所有需要的本地修改(你已完成此步骤)
- 安装git filter-repo:
- Ubuntu/Debian:
sudo apt install git-filter-repo - macOS:
brew install git-filter-repo - Windows:用Chocolatey安装
choco install git-filter-repo,或从官方渠道下载脚本
- Ubuntu/Debian:
- 执行命令移除
file 4的所有历史记录,注意路径要和报错里的完全一致(包含空格的话用引号包裹):git filter-repo --path "/path/file 4" --invert-paths - 检查本地仓库状态,确认历史已修改后,强制推送到远程(因为修改了历史,必须用
--force):git push origin <你的分支名> --force
方案二:交互式变基(手动修改历史提交)
如果不想安装新工具,可以用变基修改包含大文件的那次提交:
- 执行命令打开交互式变基界面,编辑所有超前于远程的提交:
git rebase -i origin/master - 编辑器里会列出所有超前的提交,找到包含
file 4的那次提交(即你提交文件1和file4的那次),把那行开头的pick改成edit,保存退出 - 进入编辑模式后,执行命令移除该文件(如果本地还有这个文件,直接用
git rm "/path/file 4";如果已删除则用git rm --cached "/path/file 4"):git rm "/path/file 4" - 修改这次提交,去掉文件4:
git commit --amend --no-edit - 继续完成变基:
git rebase --continue - 最后强制推送到远程:
git push origin <你的分支名> --force
注意:强制推送会覆盖远程的分支历史,如果你独自维护仓库,完全没问题;如果有其他协作者,需提前告知他们同步你的修改。
内容的提问来源于stack exchange,提问作者StackExchangeGuy
相关产品推荐
相关产品推荐

