HOWTO · Git

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

本教程是关于在 Git 中合并分支而不使用快进

本页内容

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

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

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

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

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

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

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

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

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

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

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

请看下图合并前分支 main 和 feature1 的情况。

              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-ff 的 git merge 命令。

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

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

$ git merge --no-ff feature1

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

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

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

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

  1. Git 合并
  2. git-merge