今天工作中使用rebase合并了多条commit记录,现将操作方法记录下,方便大家学习。
我们在一个分支开发的时候,会有很多次提交,当我们把自己的分支提交到master时候提交记录太多不方便后期维护,这个时候需要rebase一下,把多次commit记录合并成一条记录。
第一步需要我们确定基于哪一条基线(提交记录)来进行rebase
使用git log 命令查看提交记录,上下键滚动、Q键退出。找到你第一次的提交记录。
你第一次的提交记录下面那条记录,作为本次合并的base记录(基线)。这点容易理解,就像造房子需要在地基之上建,第一次提交记录的再之前一次记录就是本次“地基”。
基于基线进行rebase输入以下命令开始此次记录合并,commit id就是选取的base记录的id:
git rebase -i 4560d5dd728c627291201eb8c04041628de7d5e4合并多个commit id
使用git rebase -i命令后,会进入Git内置的vim界面:
pick c4eed30b 需求开发 pick c4eed30b 需求开发 pick c4eed30b 需求开发 pick c4eed30b 需求开发
commit记录都被标记为“pick”,意思是这四次提交都会被采用,并显示在Git的提交记录中。提交涉及的代码改动都是需要的,但是只需要一条提交记录,因此先按“i”键进入INSERT模式,将后三次commit id前面的“pick”字样改为“s”,只有第一次的commit id前面是“pick”,然后按ESC键退出编辑模式,并输入:wq进行保存。
注意如果是在Intellij IDEA的Terminal框里编辑rebase信息,那么在按ESC之后光标会回到代码区,此时输入的“:wq”会写到代码里,这种情况下,可以鼠标左键点击Terminal框,同时按ESC键退出编辑模式。或者按ESC键之后,要重新用鼠标点一下Terminal框里的区域,重新把光标定位回Terminal框中。
在上一个pick与squash编辑界面用:wq保存后,会跳出最后的commit描述编辑界面
这里按“i”键进入INSERT模式后,可以把不需要的commit描述用“#”号注释掉,只留下第一次提交时那条描述,然后用ESC键退出编辑模式,再输入:wq进行保存。
远程强制提交在经历上面两个rebase编辑步骤后,本地Git的commit记录已经成功合并,需要将合并好的单条记录覆盖掉远程GitLab上的四条记录,在命令行输入以下命令即可:
git push -f origin 分支名
如果本地分支与远程分支关联过,那么其中“origin 分支名”部分可以省略。提交后可以看到GitLab上关于该功能点只有一条commit记录了



