Git 的 Rebase 操作

变基 —— Git Rebase

如果有使用 Git Flow 模式协作开发经验的小伙伴应该对「变基」操作不陌生,对 Git Flow 不了解的,可以看看这篇文章:git-flow 的工作流程

简单地说,git rebase 把一个分支中的提交追加到另外一个分支上。假如你有如下图所示的两个分支:

rebase之前

当执行 git rebase master other_branch 之后,git 会找出两个分支的最近的相同的提交 C,然后把 other_branch 在此之后的提交追加到 master 上,形成 other_branch 的新的提交历史。

rebase之后

如果当前分支为 other_branch,也可以简化变基命令为 git rebase master

Git rebase –onto

实际的工作中,我们需要变基的场景可能会比上述操作要复杂一点。比如对于以下的分支情况,我想把对 branch_two 变基,把 J-K-L 这几次提交追加到 master 分支上,像刚才的操作就没有办法满足我的要求。

![rebase –onto之前](/git-rebase-and-git-rebase-onto/rebase –onto之前.jpeg)

这个时候就要用到 git rebase --onto 了,使用以下命令,就可以将 branch_twobranch_one 最近的共同提交点之后的提交检出,并追加到 master 分支上,实现 branch_two 的花式变基。

1
git rebase --onto master branch_one branch_two

如果当前分支已经是 brance_two 了,也可以使用简化版的命令行 git rebase --onto master branch_one

![rebase –onto之后](/git-rebase-and-git-rebase-onto/rebase –onto之后.jpeg)

使用场景

大多数情况下,我们使用的都是 git rebase,只有在某些情况下,才会需要用到 git rebase --onto

比如,我们项目组之前就遇到这样一种情况:本来应该基于某个 release 分支创建功能分支,但是阴差阳错地从更新的 develop 分支创建出来,而且发现的时候功能已经开发完全。

这种时候,就要通过 git rebase --onto 这种骚操作花式变基了。