Visual Studio Code大文件提交同步卡住,GitLens回退无效,求解决方法
解决Git Push大文件卡住及彻底移除大文件的方案
第一步:终止卡住的Push操作
先把当前卡住的push进程停掉,几种简单可行的方法:
- 如果是在VS Code终端里执行的push,直接按
Ctrl+C(Windows/Linux)或Cmd+C(Mac)就能中断进程;要是终端没反应,直接关掉VS Code的终端标签页就行。 - 要是终端完全无响应,打开系统的任务管理器(Windows)或活动监视器(Mac),找到所有带
git标识的进程,直接结束它们。
第二步:彻底清理大文件的历史记录
你只把文件移到.gitignore里没用——因为这个大文件已经被提交到Git历史中了,push的时候还是会尝试同步这段历史。得把它从所有提交记录里彻底删掉:
- 暂存本地未提交的改动(如果有的话):
执行git stash,把当前未提交的改动暂存起来,等操作完成后可以用git stash pop恢复。 - 定位并移除大文件:
官方现在推荐用git filter-repo工具(比旧的filter-branch更可靠),执行以下命令:
如果你忘了大文件的具体路径,可以用下面的命令找出仓库里的大文件:git filter-repo --path 你的大文件名或路径 --invert-pathsgit rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -10 | awk '{print$1}')" - 强制推送到远程仓库:
清理完历史后,需要强制覆盖远程的分支记录(注意:如果是多人协作的分支,先和队友确认没人在这个分支上工作,避免覆盖别人的改动):git push origin 你的分支名 --force
第三步:确保后续不再提交该文件
最后把这个大文件的路径加到.gitignore里,执行git add .gitignore和git commit -m "Add large file to gitignore",再push一次就可以了。
关于GitLens回退无效的说明
你用GitLens回退没解决问题,大概率是因为回退的只是本地提交,但你之前的push操作虽然卡住,可能已经向远程传输了部分数据,或者本地的错误提交记录还没彻底清理。按照上面的步骤清理历史后,就能彻底解决问题。
内容的提问来源于stack exchange,提问作者Kevin Danikowski




