2021年了,越来越多的人开始使用rebase
来代替merge
,可以看到无论是github还是gitlab在合并代码的时候都优先用rebase
了,相对于merge
来说,rebase
会将你的commit放到你需要合并的分支头上,这样你的提交历史会更加的清晰,而不像merge
那样,你无论改动了多少,在合并后的分支上只会剩下一个干巴巴的merge commit。
但是吧,这玩意也有一个小坑,如果你的本地开发分支已经有一个远程分支了,使用rebase
会将修改你的本地分支,但是你的远程分支是不会有改动的,但是这个时候是没有办法直接push
的,因为git认为你的远程分支和本地分支已经是不一致了,这时候学艺不精的人,就比如说我,就会想当然的说如果不一样,我pull
下来在做一个merge
不就行了,这样做的确能让你同步你的远程仓库,但是当你完成merge
再push
的时候,远程上就会有翻倍的commit
记录了,一份是一直存在远程的记录,一份是做完rebase
后的记录,git会认为他们是两批不同的记录。这种情况就有点像你用本地的仓库给远程的仓库再做了一次rebase
。
而这个commit
的增长将会是指数级别的,而且往往你的merge request领导还没有批下来,别人的merge request已经合并到主分支了,当轮到你的时候你又做了一次rebase
,等到你的就是又一轮翻倍,天知道我那天做了多少次冲突合并,一次rebase
要审计100多条提交记录。git rebase --continue
都要打烂了
所以正确的做法千万切记,做一次force的push
。