声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635
我们平时在写代码的时候,难免会修修改改,如果团队中每个人的代码提交记录都包含着一堆中间过程,是很不利于团队成员查看主干分支的代码提交记录的。
下面就是一个不好的例子,本地pull主干分支后,肯定希望看到的是特性开发、问题修改的记录,而不是这样一堆的中间过程。
解决这个问题,一种可行的做法是先在本地分支上执行rebase操作再push到远程个人分支,然后再执行合并到主干分支的Merge Request。
下面的远程分支操作基于iSource,比如,现在往远程个人分支push了3次本地分支修改,远程个人分支往主干Merge前,提示有如下commit信息。
现在的目的就是在Merge到主干前将这些commit rebase为一个提交记录。
本地仓库分支rebase具体操作如下。
step1:testRebase1、testRebase2、testRebase3是本地最新的3个commit,故可执行
git rebase -i HEAD~3
进入如下界面
step2:根据自己的需要合并和修改这些commit。修改和保存这个界面的文本信息的过程与vi操作类似,比如执行get rebase -i HEAD~3后进入的是命令模式,点击按键 i 进入编辑模式,此时可以对内容进行修改,修改完后点击按键 Esc 退出编辑模式进入命令模式,命令行模式下输入 “:” 进入末行模式,在末行模式下输入wq回车即可保存修改。
保存后自动进入commit message编辑界面
编辑为自己需要的message,如下图示例
再次退出保存,无误的话,git shell界面提示如下信息
再次将本地分支push到远程非人分支,远程个人分支往主干Merge前,就只提示一条commit记录了,如下图。
本地查看日志记录,结果如下。可以看到以前的3条中间过程的commit信息已经没了,剩下的是1条合并后的信息。
后记:
本地分支的rebase操作要求分支是纯净的,即不能有未提交的代码,但是实际操作中肯定会出现一些代码修改了但是现在还不想提交的,所以如果每次都要执行下git stash save/git stash pop操作。理论上完全可以在远程个人分支上执行rebase操作,避免本地分支频繁的get stash操作, 因为远程分支一般都是我们从个人分支push上去的,不会有未提交的修改这类问题,且理论上远程分支和本地分支地位是对等的。然而,实际中很多系统不允许执行远程分支的rebase操作,比如本文作者在实际工作中遇到的就是这种情况,所以还是按部就班在本地执行rebase再push到远程个人分支吧。
如果不习惯使用git shell,git GUI界面也可以完成这些操作,道理都是一样的。