1.区别
rebase:
也称为变基,会将当前分支的 commit 放到公共分支的最后面。就好像从公共分支又重新拉出来这个分支一样。
举例:如果你从 master 拉了个feature分支出来,然后你提交了几个 commit,这个时候刚好有人把他开发的东西合并到 master 了,这个时候 master 就比你拉分支的时候多了几个 commit,如果这个时候你rebase master 的话,就会把你当前的几个 commit,放到那个人 commit 的后面。
merge:
会把公共分支和你当前的commit 合并在一起,形成一个新的 commit 提交。
一般来说,本地和远端对应同一条分支,优先使用rebase,而不是merge
2.为什么不要在公共分支使用rebase?
因为往后放的这些 commit 都是新的,这样其他从这个公共分支拉出去的人,都需要再 rebase,相当于你 rebase 东西进来,就都是新的 commit 了
- 1-2-3 是现在的分支状态
- 这个时候从原来的master ,checkout出来一个prod分支
- 然后master提交了4.5,prod提交了6.7
- 这个时候master分支状态就是1-2-3-4-5,prod状态变成1-2-3-6-7
- 如果在prod上用rebase master ,prod分支状态就成了1-2-3-4-5-6-7
- 如果是merge
1-2-3-6-7-8
……… |4-5| - 会出来一个8,这个8的提交就是把4-5合进来的提交