Git 教程 - Rebase
我们已经介绍了基本的合并策略,
- 快进合并
- 三向(递归)合并
在本教程中,我们将介绍 Git 的一个最重要的特性 - rebasing (变基)。
什么是 rebase
rebase
意味着你会更改分支提交的参考-祖先,或者换句话说,你正在将分支的祖先重置为你计划合并的分支的最近提交,例如 master
分支。
让我们看看具体的例子,
图中我们有 master
和 Feature
分支,虽然我们在 Feature
分支工作,但有些人继续做会对 master
分支进行新的提交。
我们希望在将它们合并回 master
之前,将我们的分支提交的参考祖先重置为 master
的最新提交,当我们运行 rebase
命令后,它会更改我们的测试分支的祖先指向 C3
而不是之前的 C1
。下图显示了变基后发生的情况。
当我们合并更改时,它只需要再次进行快进合并,因为分支是基于 master
的最新提交。这就是为什么 rebasing 是 git 最强大的功能之一。
在你把变基后的 Feature
分支合并到 master
之后,提交日志图将会如下所示,
看起来 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
分支作为他们工作分支的祖先。
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