git rebase -i [commitID]
平时常用rebase命令是的git rebase master,但是这个master其实也就是master分支的最新提交而已,所以使用git rebase -i commitID,只是特殊指定了一个id,让这个id以后的提交进行重整。
需求
在feature分支上有f1,f2,f3三次提交,但其实前三个提交修改的是同一个需求,我们希望将这三个提交合并成一条提交记录:
第一步
// 此处的commitID要使用f1之前的那次提交的ID
git rebase -i [commitID]
当执行命令后,会出现以下界面
我们可以从注释信息中得出:
- pick表示采用当前这条提交信息
- reword表示采用这条提交信息但修改提交信息
- squash表示采用这条提交信息,并且并入前一条提交里
第二步
我们的需求就是将f2,f3合并到f1的提交里,所以只需要将f2,f3之前的pick改为squash或者s就可以了。
首先按i,进入编辑模式,修改后,按esc退出编辑模式,再输入:wq保存并退出修改。
第三步
接着又会跳出一个vim界面:
我们可以在这个页面修改提交信息,将三次提交的信息做一个概述:
成果
经过前面的三部曲,我们成功在本地分支合并了这三个提交:
最后使用需要git push -f进行提交,从而改变远程的提交记录。
需要注意的是,这样处理过的分支,如果有其他人也在这个分支上工作,则需要提醒他使用git pull --rebase进行拉去之后再开发。
解决冲突
在feature分支上,希望将master上最新的内容rebase过来git rebase master,但产生了冲突:
git给了我们两个选择:
- 手动解决冲突后继续
rebase
// 解决冲突后需要将冲突的文件存入暂存区中
git add .
git rebase --continue
- 放弃本次
rebase
//
git rebase --abort