Git 中的快进合并是什么?


当从源分支到目标分支存在直接线性路径时,可以执行快进合并。在快进合并中,git 只需将源分支指针移动到目标分支指针,而无需创建额外的合并提交。

让我们来看一个实现快进合并的示例。

我们有一个包含 3 次提交的主分支。

接下来,我们创建一个名为功能分支的分支。在 git 中,分支只不过是指向提交的指针。此时,功能分支和主分支都指向同一个提交。

现在让我们切换到功能分支并进行几次提交。现在我们需要将更改引入主分支。从功能分支到主分支存在线性路径。

为了将更改合并到主分支,git 需要做的就是将主分支的指针向前移动。这就是我们所说的快进合并。

让我们通过一个真实的例子来了解快进合并。

假设我们有一个名为 MAIN_V1.0 的目录。此目录中的代码是 1.0 版。我们复制此目录并将其称为 BUGFix_V1.0。BUGFix_V1.0 中的代码与 MAIN 目录中的代码相同。现在假设我们在 BugFix 目录中进行了更改并将其更改为 BUGFix_V2.0。在完成 bugfix 中的更改后,我们如何将更改带回 MAIN 文件夹?

**解决方案 01** - 将 Bugfix 中的所有文件复制到 Main。这不是最佳解决方案,因为如果 Bugfix 版本 2.0 文件夹中有很多文件,复制操作可能会花费很长时间。应该有更好的方法

**解决方案 02** - 由于 MAIN 目录中没有其他更改,并且 MAIN 中的所有内容实际上都是 BUGFix 目录的第一个版本,因此我们可以简单地将 BUGFix 重命名为 MAIN。从这一点开始,我们可以说这是我们新的 MAIN 目录。git 中快进合并的概念与此解决方案非常相似。

因此,如果两个分支没有分叉并且从目标分支到源分支存在直接线性路径,则 Git 会运行快进合并。

示例

$ git init
$ echo hello>hello.txt
$ git add .
$ git commit -m 'first'
$ echo hello>>hello.txt
$ git add .
$ git commit -m 'second'
$ echo hello>>hello.txt
$git commit -m 'third'
$ git add .
$ git commit -m 'third'
$git branch feature
$ git switch feature
$ echo world>>hello.txt
$ git add .
$ git commit -m 'world1'
$ echo world>>hello.txt
$ git add .
$ git commit -m 'world2'
$ git switch master
$ git merge feature
$ git merge feature

输出

Updating 1c80cb1..571c901
Fast-forward
hello.txt | 2 ++
1 file changed, 2 insertions(+)

更新于: 2021-04-30

25K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始学习
广告