不小心误commit超大文件到git,怎么办?
问题背景
github 默认允许push推送的最大文件为100M,但是有时候使用一些外部插件时,依然会不小心误commit一些大文件,然后在推送到github时,就会遇到错误提示:
remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com
意思是,检测到了大文件。
最糟糕的是,这个错误会导致本地所有未推送到远程的commit记录都无法正常推送。
解决方法
错误做法
首先需要提的是错误做法:删除该文件,然后再次提交commit。
这是一个标准的错误做法,因为删除文件后commit,并不会删除之前的提交历史,所以此时推送的话,会进行以下操作:
- 提交大文件
- ...其他操作
- 删除大文件
但是,在推送大文件时,依然会遇到错误,导致后续的删除无法进行。
那么,如何正确删除或者修改操作记录呢?
标准做法
标准且直接的修改commit的方法是,使用以下命令:
- git log 查看commit历史记录,用于查找目标记录
- git rebase -i 修改错误的提交记录
- git rm 删除大文件
- git commit --amend -C HEAD 提交修改过的commit记录
- git rebase --continue 确认完整的修改历史
顺利的话,最后你就可以正常进行git push
了。
具体的可以参考以下教程:
这一系列git操作,对于不熟悉的人来说,是很繁琐的,而且很容易出错,一旦出错,就要进行二次修正。
那么,有没有什么简便的方法呢?
便捷方法
更便捷且不易出错的方法是,不直接去修改commit历史记录,而是先回滚,然后重新提交。
具体的操作步骤:
- 备份当前的所有文件,凡事先备份
- 回滚到出错之前的版本,如果不备份直接回滚,会之前所有的修改都丢失
- 将备份的文件覆盖回滚后的版本
- 将大文件添加到.gitignore忽略列表
- 重新提交
副作用
任何便捷的方法几乎都有副作用,这次也不例外:虽然你不会丢失任何文件,但是会丢失文件的版本记录,导致无法按需commit。
如果需要这么做,那么你可以考虑依次回滚,然后依次提交,或者使用标准的rebase+amend方法。
以上。
扫一扫关注微信公众号:耿直的IT男阿斌
聊一聊IT男眼中的世界