Git意外提交大文件如何处理
Git作为版本管理系统,仓库区自然保存有历史提交与历史文件。但远程Git仓库默认不提供LFS服务,如果不慎提交了大文件(像我提交了electron打包后的应用),远程仓库会拒绝同步。
因为Git是版本管理系统,所以删除文件不会影响仓库中的历史提交,修改历史提交有两种方法:
filter-branch
branch-filter对历史记录commit重新应用指定操作,如git filter-branch --tree-filter 'rm -f xxx.yyy' HEAD
,将对第一个commit到HEAD应用。
tree-filter和index-filter都可以实现相同的目的,区别在于tree-filter将每一个commit checkout到临时文件夹并允许自定义命令,index-filter将commit复制到index(暂存区)并应用自定义命令,因此index-filter更快。
rebase
最早听说rebase是用于合并冲突,它会将其中一分支的记录应用到rebase参数的分支上,两分支的commit记录一前一后,按顺序解决冲突。这里rebase有另一种用法,即rebase -i,它会提供一个可编辑的commit记录,支持修改commit记录(合并commit、对commit执行命令、编辑commit信息)。比如说提交大文件后,我们可以合并提交大文件与删除大文件的记录,合并后历史记录中不再留下该文件的痕迹