在 Git 中合并分支而不使用快进

Azhar Bashir Khan 2022年4月22日
在 Git 中合并分支而不使用快进

本教程将介绍如何在 Git 中合并分支而不使用快进。

我们使用 Git 在协作开发环境中工作。我们为不同的目的创建了许多分支,最终,我们将这些分支合并到主分支中以提供发布版本。

我们在 Git 中使用快进或不使用快进合并分支。

我们现在将用一个例子来说明这一点。

在 Git 中使用带有和不带有 --no-ff(无快进)选项的 git merge 命令

在协作开发环境中,我们经常会在 Git 中创建多个分支,以服务于不同的目的。然后我们最终将这些分支合并到主分支中以提供发布版本。

有时,我们的主线分支的 HEAD 提交是我们尝试合并的分支的提交的祖先。在这种情况下,合并是通过快进完成的。

当从当前分支尖端到目标分支的线性路径时,可能会发生快进合并。假设我们有分支 feature1,我们将它合并到我们的主线分支 main

现在,假设 main 分支的 HEAD 提交是分支 feature1 的提交的祖先,我们想要合并的那个。

在这种情况下,Git 无需合并分支,而是整合历史记录所需要做的就是移动(即)将当前分支尖端快进到目标分支尖端。

因此,在我们的例子中,通过快进,main 分支的当前 HEAD 将向上移动到 feature1 分支尖端。

请看下图合并前分支 mainfeature1 的情况。

              E---F---G feature1
             /
A---B---C---D main

因此,当我们使用 git merge 命令合并两个分支时,将发生快进。

要进行合并,我们执行命令如下。

$ git merge feature1

执行命令后,main 分支将被快进。

请看下面快进的图示。

              E---F---G feature1, main
             /
A---B---C---D

因此,现在 main 分支的当前 HEAD 现在快进了。在这种情况下,不会创建合并提交。

有时,我们可能想要进行实际的合并而不是快进。假设我们要维护分支拓扑。

在这种情况下,我们可以使用带有选项 --no-ffgit merge 命令。

命令选项 --no-ff 会导致在所有情况下创建合并提交,即使合并可以被解决为快进。

因此,在我们的例子中,要在没有快进的情况下进行合并,我们需要执行以下操作。

$ git merge --no-ff feature1

因此,现在 git merge 命令将分支 feaure1 合并到 main 分支并生成一个合并提交(即使它是一个快进合并)。

这对于记录仓库中发生的所有合并很有用。

因此,我们详细说明了如何在 Git 中合并分支而不使用快进。

欲了解更多信息,请访问 -

  1. Git 合并
  2. git-merge

相关文章 - Git Merge