git rebase 与 merge

git rebase 是不是就是跟 merge master 到你的 branch 产生代码的效果一样的, 不考虑 history log 等其他的因素

阅读 5.8k
1 个回答

你都说不考虑 History Log 了,那就没啥可说的了……

不过实际上 Rebase 是没有方向约束的,你可以把 Master Rebase 到你的分支,也可以反过来,任何分支 Rebase 到任何目标都是可以的。

本质上 Merge 就是无视两棵树在历史记录上的差异,只是在执行 Merge 那一刻的将差异进行合并而已;而 Rebase 则是要梳理两棵树在历史记录上的差异,然后才是合并。

你可以形象的记忆:

  1. Merge 就是“合而为一”(注意我说的是“而”,不是“二”,因为 Merge 并非只能合并两方)
  2. Rebase 则是“把你放在我下面,我要站在你上面,最后合体”。

举个例子,我从 master 分离一个分支出去,在此基础上做了一些提交,而此时 master 上也有别人的新提交了。如果我在新分支 merge master,则我的分支上会出现一个新的 commit,记录下我的和 master 上的变更的合体。就像两条线合成了一点。如果我用 rebase,则从我分离的那一点开始,master 上的新提交先填充进来,然后再把我自己做的提交重新写在更新的上面。于是内容还是合并了,但历史记录则是顺序的,从你的角度来看就好像从未和 master 分离过一样。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进