git删除误提交文件

问题描述

今天向github提交代码时提示有大于100M的文件,无法完成push(github规定单文件大于100M无法提交)

错误信息指出,项目中存在一个 xxx.psd 的文件是127.33M,大于100M了。该文件是不应该放在项目中的,于是我删除了该文件,再次push还是不行,原因是该文件已经加入到了版本库中,单纯从工作区中删除是不行的。

解决方法

删除 .git 文件,基于现有代码重新创建版本库

该方法比较简单,适用于不会有任何历史包袱的项目。

rm -rf .git
git init

使用 git filter-banch 重写版本历史

简单介绍

该命令允许你修改git的提交历史,你可以删除已经提交而又不想提交的文件(例如误提交的,或者私钥等信息),也可以运行 perl 脚本进行历史提交信息的修改。修改后的历史版本将不再和之前的版本兼容,这意味着你只能强行push(-f 参数),若同时别人也在远程分支的基上进行开发,就会造成严重冲突。慎用

官方文档:https://git-scm.com/docs/git-filter-branch

官方不建议使用该命令,因为它可能会带来一些不可预知的问题,更建议使用 git filter-repo

删除误提交部分
git filter-branch --tree-filter 'git rm -f --ignore-unmatch {filename}' HEAD

若某些版本中不包含要删除的文件,则应该使用 -f 和 –ignore-unmatch 参数,否则会报错

最后需强制push

git push origin main -f

git rebase修改提交历史

rebase命令有很多功能,常用的就是通过变基合并代码,即让某个版本中的commit插入其他版本的commit。

使用 git rebase -i {v} 可以使用交互模式修改历史提交,例如在某次提交中,我错误地提交了某个大文件

可以看到该commit是倒数第二次提交,所以我可以如下方法删除该次提交

# HEAD~3 指的是最近三次提交
git rebase -i HEAD~3

输入该命令后就会进入一个交互页面,一般是一个vim编辑器页面

其上方非注释部分就是我近3次提交的内容,根据下面的注释,我可以选择对历史提交进行各种操作,在此,我选择删除第二次提交,将其 pick 修改为 d 即可,然后保存退出

再次使用git log查看提交记录,发现该次提交已经没了

查看 .git 文件大小,发现错误添加的那个大文件确实也没有了

Leave a Comment