Rebase 和 merge 都被设计用来将变更从一个分支整合到另一个分支,但是它们的实现方式却不同。
下面假如我们有如下提交,merge 会将两个分支的代码合并,而 rebase 会将 feature 分支上所有的变更在 master 分支上重新应用一遍:
git bisect
调试将变得困难pull requests
同时工作,因为你看不出来哪里是别人做的变更。重写了历史记录也不利于团队协作
你在使用 rebase 时也应该更加小心Rebase 可以用来精简一个复杂的历史记录,通过交互式 rebase,你可以去掉不想要的 commit,合并多个 commit 甚至修改 commit 信息。
需要注意的是,由于 rebase 是将 commit 一个一个应用到目标分支,所以在产生冲突时,需要针对 commit 一个一个去解决,而 merge 是将 commit 的最终结果合并到目标分支,所以冲突只需要解决一次即可。而如果有很多冲突的话,撤销一个 rebase 也将会非常困难。