2017-02-01 94 views
0

我一直在做一些關於用git管理的項目的工作。在某些時候,我創建了Git日誌分支分裂

 
git -b my-branch 

一個分支做了一些工作,COMMITED推到遠程回購。後來,我合併:

 
git checkout master 
git merge my-branch 
git push 

但是,當我看圖形與gitlab我沒有看到樹枝劈裂,只是這樣的事情

 
* * * * * * * 
      ^
      | 
     my-branch 

當我期望像

 
* * * * * * * 
    \-------^ 
      | 
     my-branch 

這是爲什麼?

+1

我認爲合併是一種快速合併。你所期望的是一個真正的合併。在你的情況下,快速合併是可能的默認行爲。 'master'指向的提交是'my-branch'指向的提交的祖先。您可以添加'--no-ff'(表示*無快進合併*)來強制執行真正的合併。 – ElpieKay

回答

3

這可能是因爲快進。如果Git不需要進行合併,它不會。當你合併一個分支但是沒有改變它的父項時會發生這種情況。

A - B - C - D - E [master] 
       \ 
        F - G - H [feature] 

在這種回購沒有出現過更改master因爲feature爲分行。 masterfeature的祖先。 E和F之間的那個明顯的分支不是真的存在,歷史是直的。

如果你git checkout master; git merge feature它將「快進」,你會得出這個結論。

       [master] 
A - B - C - D - E - F - G - H [feature] 

master被移動到同犯爲feature,沒有合併完成。


您可以用git merge --no-ff關閉此功能。我在合併功能分支時建議這樣做,以避免丟失重要信息來理解代碼。在上面的例子中,沒有證據表明F,G和H是作爲單一特徵完成的。沒有鏈接到討論該功能的故障單。

相反,如果我們有git checkout master; git merge --no-ff feature這將強制Git合併,即使它不必。

A - B - C - D - E ---------- I [master] 
       \  /
        F - G - H [feature] 

我是合併提交,你會得到一個很好的功能泡泡。