变基的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master) 的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交,提取相应的修改并存为临时文件, 然后将当前分支指向目标基底 C3, 最后以此将之前另存为临时文件的修改依序应用。如图是C4变基到C3上。
有趣的变基例子:
假设你希望将 client 中的修改合并到主分支并发布,但暂时并不想合并 server 中的修改, 因为它们还需要
经过更全面的测试。
这时,你就可以使用 git rebase 命令的 --onto 选项, 选中在 client 分支里但不在
server 分支里的修改(即 C8 和 C9),将它们在 master 分支上重放:
$ git rebase --onto master server client
以上命令的意思是:“取出 client 分支,找出它从 server 分支分歧之后的补丁, 然后把这些补丁在 master 分支上重放一遍,让 client 看起来像直接基于 master 修改一样”。这理解起来有一点复杂,不过效 果非常酷.
接下来你决定将 server 分支中的修改也整合进来。 使用 git rebase 命 令可以直接将主题分支 (即本例中的 server)变基到目标分支(即 master)上。 这样做能省去你先切换到 server 分支,再对其执行变基命令的多个步骤。
$ git rebase master server
如图 将 server 中的修改变基到 master上所示,server 中的代码被“续”到了 master 后面。
变基的风险:如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。