在平时的开发过程中,分支之间的合并是十分常见的操作。我平时都是使用 merge 一把嗦,无论是开发分支到线上分支,还是线上分支到开发分支,基本都是使用的 merge。反观之前有一个后端同事,他们组内会有多人开发同一个功能的情况,他除了最终将开发分支合并到线上分支使用了 gitlab 的 merge request 去 merge,平时都是使用 rebase 来将别人的功能分支合并到自己的开发分支上。
在看到了这些情况后,我对 merge 和 rebase 有什么区别产生了疑问,正好去搞明白这两个操作究竟有什么不同。
merge 是我常用的功能,这个我自己比较熟悉,一般来说可以分成两种情况:当前分支与合并目标分支有无变更。如果当前分支就是从合并目标分支上出来的,merge 操作其实看起来就像是在合并目标分支后进行了多次 commit,commit log 也是一条直线;但很多情况下存在多人同时开发的情况,就会有变更操作,存在变更操作的时候,merge 操作会产生一条 merge 的 commit log,commit log 也会变成一条折线。很多同学可能会有强迫症介意这条折线,所以 rebase 是他们更常见的选择。