Git Rebase

我们已经介绍了基本的合并策略,

  • 快进合并
  • 三向(递归)合并

在本教程中,我们将介绍git的一个最重要的特性 - rebasing (变基)。

什么是rebase

rebase意味着你会更改分支提交的参考-祖先,或者换句话说,你正在将分支的祖先重置为你计划合并的分支的最近提交,例如master分支。

让我们看看具体的例子,

Git Feature Branch

图中我们有masterFeature分支,虽然我们在Feature分支工作,但有些人继续做会对master分支进行新的提交。

我们希望在将它们合并回master之前,将我们的分支提交的参考祖先重置为master的最新提交,当我们运行rebase命令后,它会更改我们的测试分支的祖先指向C3而不是之前的C1。下图显示了变基后发生的情况。

Git Feature Branch

当我们合并更改时,它只需要再次进行快进合并,因为分支是基于master的最新提交。这就是为什么rebasing是git最强大的功能之一。

在你把变基后的Feature分支合并到master之后,提交日志图将会如下所示,

Git log graph after rebasing

看起来Feature分支好像从未存在过一样,所有提交日志都是在一条直线上。

Rebase工作流程

  • 创建新特性分支
    $ git checkout -b Feature
    
  • 修改并且提交新特性分支
    $ git add modified.txt
    $ git commit -m 'coment here'
    
  • 将新特性分支rebase`
    $ git rebase master
    
  • 合并编辑后的新特性分支到 master
    $ git checkout master
    $ git merge Feature
    

rebase黄金规则

rebase的黄金法则就是永远不要对公共分支进行变基操作。

如果你对一个公共分支变基,但在此操作之后有人还在该分支上工作,那他们将很难将他们的分支合并到master上,因为他们仍然使用原始master分支作为他们工作分支的祖先。