记git rebase的一个坑

1,296 阅读2分钟

2021年了,越来越多的人开始使用rebase来代替merge,可以看到无论是github还是gitlab在合并代码的时候都优先用rebase了,相对于merge来说,rebase会将你的commit放到你需要合并的分支头上,这样你的提交历史会更加的清晰,而不像merge那样,你无论改动了多少,在合并后的分支上只会剩下一个干巴巴的merge commit。 merge and rebase

但是吧,这玩意也有一个小坑,如果你的本地开发分支已经有一个远程分支了,使用rebase会将修改你的本地分支,但是你的远程分支是不会有改动的,但是这个时候是没有办法直接push的,因为git认为你的远程分支和本地分支已经是不一致了,这时候学艺不精的人,就比如说我,就会想当然的说如果不一样,我pull下来在做一个merge不就行了,这样做的确能让你同步你的远程仓库,但是当你完成mergepush的时候,远程上就会有翻倍的commit记录了,一份是一直存在远程的记录,一份是做完rebase后的记录,git会认为他们是两批不同的记录。这种情况就有点像你用本地的仓库给远程的仓库再做了一次rebase

而这个commit的增长将会是指数级别的,而且往往你的merge request领导还没有批下来,别人的merge request已经合并到主分支了,当轮到你的时候你又做了一次rebase,等到你的就是又一轮翻倍,天知道我那天做了多少次冲突合并,一次rebase要审计100多条提交记录。git rebase --continue都要打烂了

所以正确的做法千万切记,做一次force的push