← 上一章:合併分支 下一章:【常見問題】合併過的分支要留著嗎? →
【狀況題】為什麼我的分支都沒有「小耳朵」?
我看別人的合併都會有小耳朵耶,為什麼我的都沒有?
這裡指的「小耳朵」是指在合併的時候產生的線圖:
不是每次的合併都要這麼複雜的…
以上圖這個例子來說,其實會有這個線圖也是不得已的,cat
分支跟 dog
分支雖是本是同根生,但後來已各自長大、分家了,所以最後要合併回來的時候,Git 就會做出一個額外的 Commit 記錄來自是來自哪兩個 Commit。
再看看這個例子:
cat
分支是從 master
分支切出去的,目前領先 master
兩次 Commit。如果這時候回到 master
並且合併 cat
分支,Git 會發現「其實你是從我這邊出去的啊,除了這兩個新的 Commit 之外的東西我都有了」,所以 Git 就會自動選用「快轉模式(Fast Forward)」來進行合併:
$ git merge cat
Updating e12d8ef..b174a5a
Fast-forward
cat1.html | 0
cat2.html | 0
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 cat1.html
create mode 100644 cat2.html
你有注意到上面這段訊息裡也有提到「Fast-forward」字樣嗎?這個所謂的「快轉」模式合併,其實就是把 master
這張貼紙撕起來,然後往前貼到 cat
分支所指的那個 Commit 而已:
這種快轉模式的合併不會有額外的線圖出現(也就是小耳朵)。
不管,就是要!
硬是要有線圖也是可以的,只要在合併的時候,加上 --no-ff
參數:
$ git merge cat --no-ff
Merge made by the 'recursive' strategy.
cat1.html | 0
cat2.html | 0
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 cat1.html
create mode 100644 cat2.html
--no-ff
參數是「不要使用快轉模式合併」的意思,這樣一來就會額外做出一個 Commit 物件:
這個做出來的 Commit 物件一樣會指向前面的兩個 Commit。
如果使用 SourceTree 要做這件事,請選擊上面的「Merge」按鈕,在跳出來的這個對話框中,勾選「Create a commit even if merge resolved via fast-forward」選項,就可以做出跟 --no-ff
的效果了
有必要嗎?
那到底這個東西到底需要嗎?硬是要做出這個小耳朵有意義嗎?非快轉模式合併的好處是可以完整保留分支的樣子,但如果你不是很介意這件事的話其實也就沒必要硬要做出小耳朵囉。
Comments