为了保持分支的整洁性,我们往往会在提交 merge request
前,进行一次 rebase 操作,一般来说直接使用 webstrom
自带的 Git GUI
就够了,但是当要被合并到主干分支的分支本身就具有 merge request
的提交时,奇怪的事情发生了,原分支上的所有 merge request
提交都消失了。
让我们来复现一下,首先我们准备三个分支: master
、 develop
、 feat/test
,如下图:
然后在 feat/test
分支上提交代码后,通过 merge request
的方式合并到 develop
分支。
如果此时直接将 develop
分支提 mr
合并到 master
分支的话,不会有任何问题,但是如果 master
分支向前迭代了,那么就需要先将 develop
分支 rebase
一下 master
分支,然后再提交 mr
。
如下图, master
分支上有了一次 hotfix
提交。
此时如果我们在 develop
分支上,直接 rebase
一下 master
分支,如下图:
会发现 develop
分支上,红圈圈出来的两次 merge request
提交没有了, develop
分支的提交被打平了,从代码的角度来说,这样也不会有任何问题,以为每次 mr
的提交记录,其实是一次空提交,如果就这样直接基于 develop
分支提 mr
到 master
分支也是 ok
的,不会影响代码和功能。
但是我个人的习惯,是比较倾向于能保留这些分支上的 mr
提交记录的(因为 develop
分支禁止直接 push
,只允许使用 mr
合并代码,所以保留 mr
记录会显得更规范一些),那么如何操作呢,经过一番搜索,发现 git rebase
命令,具有一个 -rebase-merges
参数,只要在执行时带上这个参数,所有的 mr
提交记录就都会保留了,如下图:
但是比较遗憾的是 webstorm
的 Git GUI
好像不支持在执行 rebase
操作时指定参数,所以如果有此种需求的话,就得手动执行 git rebase origin/master --rebase-merges
命令才行。
需要注意的是,就算是使用的命令手动执行 rebase
操作,也可以使用 webstorm
的 diff
功能来解决冲突,然后再 continue
。