文章目录

##merge

图 1

如图 1所示要将experiment分支合并到master,只要运行:

git checkout master
git merge experiment

git在内部执行了如下几个操作:

  1. 寻找到C3,C4的最近祖先C2
  2. 将C2,C3和C4进行三方合并
  3. 生成merge commit C5

图 2

这种情形会使得提交历史出现波形,如下图:

图 3

##rebase

图 4

还是以图 1情景为例,为了是提交记录清晰,可以使用rebase:

git checkout experiment
git rebase master

git在内部执行了如下几个操作:

  1. 寻找到C3,C4的最近祖先C2
  2. C4基于C2执行diff操作,获取patch
  3. 将C3合并到experiment分支,此时不会生成merge commit
  4. 将patch打到experiment分支
  5. 生成C4’

最后再将experiment分支合并到master:

git checkout master
git merge experiment

这样提交历史就不会出现图 3所示的波形情况。

参考:

https://git-scm.com/book/en/v2/Git-Branching-Rebasing

https://www.atlassian.com/git/tutorials/merging-vs-rebasing

文章目录

举个栗子……