Git推送失败:项目卡在本地已不存在的大文件上
解决GitHub推送卡在本地已删除大文件的问题
我之前也碰到过一模一样的坑!这种情况本质是Git的历史记录里还残留着那个大文件的痕迹——哪怕你本地已经把文件删得干干净净,推送时Git还是会试图把历史里的文件同步到远程,尤其是你用了LFS但没处理好追踪记录的时候。下面分场景给你具体的解决方案:
一、如果大文件是在最近未推送的提交里
如果这个大文件是你最近几次提交中添加又删除的,还没推送到远程,那用交互式变基就能快速搞定:
- 先找出包含这个大文件的提交范围,比如最近3个提交就写
HEAD~3:git rebase -i HEAD~3 - 在弹出的编辑器里,把涉及大文件的那行的
pick改成edit,保存退出。 - 移除这个文件的追踪(哪怕本地没有,也要从当前提交里彻底删掉):
git rm --cached "你的大文件名" - 提交这个修改,保持原提交信息不变:
git commit --amend --no-edit - 继续完成变基:
git rebase --continue - 现在再尝试推送:
git push origin master
二、如果大文件在更早的历史提交里
要是这个大文件是很久以前的提交里的,那得彻底清理Git历史里的所有痕迹,推荐用git filter-repo(比旧的filter-branch更安全高效):
- 先确认你安装了
git filter-repo(新版Git自带,没装的话用包管理器安装即可)。 - 运行命令清除所有历史中涉及这个大文件的记录:
git filter-repo --path "你的大文件名" --invert-paths - 因为修改了历史记录,需要强制推送到远程(⚠️ 注意:如果有其他协作者在这个分支工作,一定要提前通知他们,强制推送会覆盖远程分支的历史):
git push origin master --force - 其他协作者拉取时需要执行:
git fetch origin git reset --hard origin/master
三、针对Git LFS的额外处理
如果你之前用LFS追踪过这个文件,还要处理LFS的追踪记录:
- 先查看当前LFS的追踪列表,确认这个文件还在不在:
git lfs track - 如果还在,取消对它的追踪:
git lfs untrack "你的大文件名" - 提交这个修改:
git commit -m "停止用LFS追踪该大文件" - 清理LFS的本地缓存:
git lfs prune - 再按照前面的步骤处理历史记录即可。
内容的提问来源于stack exchange,提问作者somejkuser
相关产品推荐
相关产品推荐

