分支合併(非快轉模式)

洧杰 已發佈 2019-11-17

在介紹下個合併方法前,如果你不會用 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"

ST3 指令出處

Git 合併(不觸發快轉模式)

在何時 Git 合併不會觸發快轉模式呢?我們再來回顧下。

當你的 HEAD 位置是某個要被 merge branch(dev) 上的初始 commit,就會觸發快轉模式。

所以如果我 master 新增一個 commit 的話,就不會觸發快轉模式,如下圖。

images

這張圖發生什麼事了呢?以下為時間順序流程:

  1. master 推到 c2 時,開了 dev 分支
  2. checkout 到 dev 後,新增兩個 commit
  3. 接著 checkout 到 master ,新增一個 commit

所以在此時 master 的位置就不是在 c2 上,而是在 c5,因此就不會觸發 快轉模式

嘗試 merge 合併

接下來我們就試著輸入 git merge dev,看看有何變化,此時如果你兩個分支沒有改到同一行 CODE 造成衝突,他會跳出你前面設定的編輯器,上頭會寫「預設合併訊息」。假使訊息沒問題,儲存關閉後,就會合併成功,

images

由於沒有觸發快轉,所以分支合併時,會額外產生出一個 commit,也就是 c6

images

也附上 Git 範例檔,讓您練習 Git 合併。

常見問答

Q:那這樣 master 的 commit 會有幾個?

A:6 個,因為合併 dev 後,master 也擁有那些 commit 紀錄,你可以用 git log 查詢驗證。

Q:那 dev 此時有 c5c6 的資料嗎?

A:不會有,dev 只會有 c1c4 的資料。

Q:假使我希望 dev 也可以擁有 masterc5c6 資料呢?

A:那就 checkout 到 dev 後,下 git merge master 就可以。

小結

以上兩節就是 Git 中常見的合併狀態,也就是快轉與非快轉模式,在後面則是會藉由影片教學,讓您更深入了解 Git 分支,我們下節見。

關於筆者

暱稱:洧杰

介紹:六角學院校長,熱愛分享與交流的前端工程師,目前專注於兼容桌面/移動網頁前端開發,期間已協助數百位平面設計師,網頁設計師導入標準網頁設計。