Git提交误添大文件如何移除?Visual Studio+VSTS场景求助
别担心,这种误提交大文件的情况我处理过好多次,咱们一步步来解决你的问题:
先终止当前的推送进程
首先得把卡住的推送停下来:
- 如果你用的是Visual Studio的Git图形界面,直接找到推送进度窗口,点击「取消」按钮就行;
- 如果你是用命令行执行的推送,按下
Ctrl+C就能强制终止推送进程。
移除本地提交中的大视频文件
接下来要把这个大视频文件从Git的提交历史里删掉,分两种情况处理:
情况1:大文件在最近一次提交里
如果这个视频是你最后一次提交才加进去的,操作最简单:
- 先把文件从Git的追踪列表里移除,但保留本地的文件(要是想删掉本地文件就去掉
--cached参数):git rm --cached assets/你的大视频文件名.mp4 - 修改最后一次提交,把这个文件从提交里剔除:
git commit --amend --no-edit - 把这个视频的扩展名(或者完整路径)加到
.gitignore里,避免以后再误提交:
打开.gitignore文件,添加一行:*.mp4 # 或者写具体路径 assets/你的大视频文件名.mp4 - 把
.gitignore的更改也合并到刚才的提交里:git add .gitignore git commit --amend --no-edit
情况2:大文件在更早的提交里(比如你说的第5项更改对应的提交)
如果这个视频是在之前的某个提交里加进去的,需要修改历史提交:
- 先找到包含这个大视频的提交哈希值:
执行后会输出类似这样的内容:git log --oneline -- assets/你的大视频文件名.mp4abc123 Add new assets including video,其中abc123就是目标提交的哈希。 - 执行交互式rebase,回到目标提交的前一个版本:
假设目标提交的前一个提交哈希是def456,执行:git rebase -i def456 - 在弹出的编辑器里,把目标提交前面的
pick改成edit,保存并退出编辑器。 - 现在Git会回到那个提交的状态,执行移除追踪的命令:
git rm --cached assets/你的大视频文件名.mp4 - 修改这个提交,剔除大文件:
git commit --amend --no-edit - 继续完成rebase,把后面的提交重新应用:
git rebase --continue - 同样,把视频扩展名加到
.gitignore并提交:git add .gitignore git commit -m "Add video file to gitignore"
重新推送修改后的提交
因为你修改了Git的历史提交,需要用强制推送来覆盖远程的旧提交(注意:如果是多人协作的仓库,要先确认没有其他同事拉取过你之前的旧提交,避免冲突):
git push --force-with-lease
--force-with-lease比直接用--force更安全,它会检查远程仓库有没有新的提交,避免误覆盖别人的更改。
后续预防措施
- 每次提交前,养成用
git status查看待提交文件的习惯,确认没有大文件或敏感文件; - 定期检查
.gitignore,确保所有不需要追踪的文件类型都已经添加进去; - 可以用
git lfs(Git Large File Storage)来管理大文件,如果以后确实需要推送大文件到VSTS,VSTS是支持Git LFS的。
补充:如果已经推送到远程仓库怎么办?
要是你已经把包含大文件的提交推送到了VSTS,那除了上面的本地修改步骤,还需要执行强制推送覆盖远程的历史。之后要通知协作的同事,让他们重新拉取仓库,并且不要基于旧的提交进行工作,避免出现冲突。
内容的提问来源于stack exchange,提问作者Muhammad Touseef
相关产品推荐
相关产品推荐

