分支合併(非快轉模式)
在介紹下個合併方法前,如果你不會用 Vim
編輯器,請修改自己慣用的編輯器。因為合併過程中,會跳出編輯器填寫 commit 訊息。
設定編輯器指令
- VSCode:
git config --global core.editor "code --wait"
- Sublime Text 3
- Mac:
git config --global core.editor "/Applications/Sublime\ Text.app/Contents/MacOS/Sublime\ Text"
- Win:
git config --global core.editor "'c:/program files/sublime text 3/sublime_text.exe' -w"
- Mac:
Git 合併(不觸發快轉模式)
在何時 Git 合併不會觸發快轉模式呢?我們再來回顧下。
當你的 HEAD
位置是某個要被 merge branch(dev) 上的初始 commit,就會觸發快轉模式。
所以如果我 master
新增一個 commit 的話,就不會觸發快轉模式,如下圖。
這張圖發生什麼事了呢?以下為時間順序流程:
- 當
master
推到c2
時,開了dev
分支 - checkout 到
dev
後,新增兩個 commit - 接著 checkout 到
master
,新增一個 commit
所以在此時 master
的位置就不是在 c2
上,而是在 c5
,因此就不會觸發 快轉模式
嘗試 merge 合併
接下來我們就試著輸入 git merge dev
,看看有何變化,此時如果你兩個分支沒有改到同一行 CODE 造成衝突,他會跳出你前面設定的編輯器,上頭會寫「預設合併訊息」。假使訊息沒問題,儲存關閉後,就會合併成功,
由於沒有觸發快轉,所以分支合併時,會額外產生出一個 commit,也就是 c6
。
也附上 Git 範例檔,讓您練習 Git 合併。
常見問答
Q:那這樣 master
的 commit 會有幾個?
A:6 個,因為合併 dev
後,master
也擁有那些 commit 紀錄
,你可以用 git log
查詢驗證。
Q:那 dev
此時有 c5
、c6
的資料嗎?
A:不會有,dev
只會有 c1
到 c4
的資料。
Q:假使我希望 dev
也可以擁有 master
的 c5
、c6
資料呢?
A:那就 checkout 到 dev
後,下 git merge master
就可以。
小結
以上兩節就是 Git 中常見的合併狀態,也就是快轉與非快轉模式,在後面則是會藉由影片教學,讓您更深入了解 Git 分支,我們下節見。