Git 教程 - Rebase

Jinku Hu 2023年1月30日 2018年8月15日
  1. 什么是 rebase
  2. Rebase 工作流程
  3. rebase 黄金规则
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 分支作为他们工作分支的祖先。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn