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

更新於: 2021-04-30

25K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告