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