在 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 中合并分支而不使用快进。
欲了解更多信息,请访问 -