在 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