使用 git rebase -i 命令就可以将从最后一次提交往前的多次提交合并为一次。
使用举例:
当前我的提交记录如下,一共有3次提交,下面就把这3次提交合并为一次:
输入以下命令:
git rebase -i HEAD~3
之后会弹出现目的编辑窗口:
这是一个vim编辑的文本,需要使用vim命令进行编辑。
- 首先,输入i命令,进入编辑模式。
- 我们需要关注的是最上面几行以pick开头的信息。需要把除了第一行外的pick改成s。
- 然后按esc键退出输入模式,输入:(英文冒号)进入底线命令模式
- 再输入wq 即保存后退出
之后会展示如下界面,进行提交注释处理。
我们把除了一个条之外的注释都删除掉,删除后的效果如下:
之后同样地保存退出即可。
这样就结束了,再用git log 查看下提交记录,发现已经变为一条记录了。要注意这条记录是三次中最早的那一次,它显示的提交时间和第一次的时间一致。但是它却也是一条新的提交记录,可以注意到它的提交记录号已经和之前的三次都不一样了。
注意,如果当前分支之前已经推送到远程了,需要使用git push -f 才能将rebase后的分支推送到远程。使用git push -f之前需要注意,如果当前分支是多人共同开发的,需要注意别把别人的推送覆盖了。
命令解释
这篇文章写完很久了。但其实有些东西没说清楚。
HEAD~3 表示从最后一个commit往前数4个的那次提交。
git rebase -i [start] [end] 为完整参数的参数,不写结束的时候表示结束为HEAD。
而且start到end的区间是前开后闭的,所以前面HEAD~3表示倒数第4次提交,但合并的是倒数3次提交。
在合并时也可以只合并中间的几次提交,不一定非得像文中一样都合并到最后一次的。
具体来说,想合并到其前一次提交的标记为s,想保留的标记为pick§。如有4次提交,前两次合并,后两次合并:
pick commit1
s commit2
pick commit3
s commit4