另一页

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信息)。比如说提交大文件后,我们可以合并提交大文件与删除大文件的记录,合并后历史记录中不再留下该文件的痕迹