如何移除含大文件的Git提交且不改变当前项目内容
移除历史提交中的大文件且保留当前项目状态
你需要重写Git提交历史,把包含大文件的那次提交修改掉,同时保留后续移除缓存的提交。按以下步骤操作:
先备份本地仓库
操作前先复制整个项目文件夹到其他位置,避免操作失误丢失数据。启动交互式变基,修改前两次提交
在项目根目录执行:git rebase -i HEAD~2这会打开一个文本编辑器,里面显示前两次提交的记录:
pick dd65c50 Centralized model, Squeezenet weights, Seperate Images pick 289a05f Remove datasets dir from git把第一行的
pick改成edit,保存并退出编辑器。修改包含大文件的提交
此时Git会回退到第一次提交的状态,执行以下命令移除大文件目录:git rm -r --cached DirName # 把DirName换成你的大文件目录名然后修改这次提交,把大文件从历史中彻底去掉:
git commit --amend --no-edit--no-edit参数会保留原提交的信息,不需要重新写提交说明。完成变基
执行命令继续变基流程:git rebase --continue这会把第二次提交(移除缓存的那次)应用到修改后的第一次提交之上。
推送到GitHub
因为你修改了历史提交,需要强制推送覆盖远程仓库的历史:git push origin master --force # 如果你的分支是main,就把master换成main
注意事项
- 确认
.gitignore文件已经正确包含了该大文件目录,避免后续再次误提交。 - 如果该仓库有其他协作者,强制推送后他们需要重新拉取代码并同步本地历史,避免冲突。
内容的提问来源于stack exchange,提问作者Ruairí Grant
相关产品推荐
相关产品推荐

