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(+)