就根据下图初始图看:
变基定义:
提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。在 Git 中,这种操作就叫做 变基。
git rebase变基合并 与 git merge合并:
1. 整合分支最容易的方法是 merge 命令。 它会把两个分支的最新快照(C3 和 C4)以及二者最近的 共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照(并提交)。
2. 你可以提取在 C4 中引入的补丁和修改,然后在 C3 的基础上应用一次。在 Git 中,这种操作就叫做 变基。
首先:分支初始状态是这样的
接着:采取merge来合并当前最新的分支master 和 experiment
即采取: git checkout master >>> git merge experiment 即可实现合并;
原理:它会把两个分支的最新快照(C3 和 C4)以及二者最近的 共同祖先(C2)进行三方合并,合并的结果是生成一个新的快照(并提交)
采取变基rebase操作来整合分支,为一条分支(根据初始状态图)
即输入该命令:
$ git checkout experiment$ git rebase masterFirst, rewinding head to replay your work on top of it...Applying: added staged command原理:首 先找 到这 两 个 分 支( 即 当前 分 支 experiment 、变 基 操 作的目标 基底分 支 master )的 最 近 共 同 祖先 C2 ,然后对 比 当前 分 支相对于 该 祖 先 的 历次提 交 , 提 取相 应 的 修 改并 存 为 临 时 文件 ,然后 将 当前 分 支 指 向目标 基底 C3 , 最 后以此 将 之前 另 存 为 临 时 文件 的 修 改依 序 应 用。
![](https://img-blog.csdnimg.cn/20191217103437863.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NPQ09MSV9CSw==,size_16,color_FFFFFF,t_70)
变基第二步:(现在回到 master 分支,进行一次快进合并)
$ git checkout master$ git merge experiment此时,两者的状态均为最新的状态了此时,C4' 指向的快照就和上面使用 merge 命令的例子中 C5 指向的快照一模一样了。
两者之间的异同:
1.这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。 你在查看一个经过变基的分支的历史记录时会发现,
尽管实际的开发工作是并行的,但它们看上去就像是串行的一样,提交历史是一条直线没有分叉。
2. 这样做的目的是为了确保在向远程分支推送时能保持提交历史的整洁
3. 无论是通过变基,还是通过三方合并,整合的最终结果所指向的快照始终是一样的,只不过提交历史不同罢了。
变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起。