在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

results matching ""

    No results matching ""