在Git中整合来自不同分支的修改主要有两种方法:merge和rebase。

上面是一个开发任务分叉,存在两个不同分支,又各自提交更新。
整合分支最容易的方法是merge命令,它会将两个分支的最新快照C3、C4,以及二者最近的共同祖先C2进行三方合并,合并的结果是生成一个新的快照并提交。

另一种方法是,可以提取C4中引入的补丁和修改,在C3的基础上应用一次,这就是变基。使用rebase命令可以将提交到某一个分支的所有修改都转移到另一个分支
$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command

现在回到master分支,可以进行一次快进合并
$ git checkout master
$ git merge experiment

无论是通过变基,还是三方合并,整合的最终结果所指向的快照始终是一样的,只不过提交历史不同而已。
有趣的变基
对两个分支进行编辑,所生成的重放并不一定要在目标分支上应用,可以指定另外的分支进行应用。
下面是从一个特性分支里再分出一个特性分支的提交历史

假设,希望将client中的分支合并到主分支并发布,但暂时并不想合并server中的修改。此时可以使用git rebase 命令的--onto 选项,选中client分支的修改
$ git rebase --onto master server client
上面命令是,去除client分支,找出处于client与server分支共同祖先之后的修改,然后在master分支重放一遍。

快进合并到master分支
$ git checkout master
$ git merge client

将server分支中修改也变基整合进来
$ git rebase master server

快进合并到master分支
$ git checkout master
$ git merge server
删除client和server分支
$ git branch -d client
$ git branch -d server
