问题描述
今天向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
文件大小,发现错误添加的那个大文件确实也没有了