2017-01-31 69 views
0

我只是壁球合併我的整個develop history歷史到我的主分支。正如我所看到的,它應該連接network graph中的兩個分支,但事實並非如此。此外,我的主分支顯示:This branch is 1 commit ahead, 151 commits behind develop.,同時我希望它在合併壁球之後仍然可以發展。爲什麼不是這樣?爲什麼我的主分支顯示它後面的開發是在壓縮發展成爲主後?

我該如何將我的變更合併到master開發環境中,這樣,它只有一次對master的提交,它甚至可以開發(在那個時間點)並連接到網絡圖中?

+1

[git:爲什麼我不能在squash合併後刪除我的分支?](http://stackoverflow.com/questions/41946475/git-why-cant-i-delete-my-branch-合併後) – mkrieger1

回答

4

壁球合併在「我們的」分支上創建一個新的提交(在您的情況下爲主),以引入「他們的」分支(開發)的變化,就好像合併了這兩個分支。它實際上並沒有形成合並(將兩個分支聯繫在一起的多個父母提交);如果這樣做只是一個常規合併。所以git不能告訴開發的提交和添加到master的新提交相同。

我想我沒有看到正確的用例,但我發現壁球合併有點毫無意義。據我所知,這兩個世界在合併和重組之間是最糟糕的。

UPDATE - 一些澄清也許會有幫助,基於評論...

所以我們知道,常規的合併是有兩個或更多的家長單個提交。它的第一個父母是合併的「我們」分支(我們說是主人),我們合併的分支是另外的父母。這一次提交就是添加到主數據中的所有內容。

A ---- B - M 
     /
X ---- Y 

所以這可能看起來不對,因爲git log會分別顯示A,B,X和Y.這是默認行爲,因爲它向您展示瞭如何真正引入更改。

你可以通過說git log --first-parent來得到更多的線性視圖,但log不想顯示合併(meh)的補丁,所以它看起來不像線性歷史,就像你從一個南瓜或一個rebase。

但是肯定M^等於B,所以從主角的角度來看M是一個單獨的提交,它引入了來自分支的所有更改。如果你希望它也記錄從XY的變化可以從M到達,那麼這就是git提供的。

現在你可能已經找到了我不喜歡merge --squash太多,所以這裏的原因:

比方說,我做了南瓜合併,而不是上圖中定期合併。爲了清楚起見,我將添加一個共同的祖先○:

O ---- A ---- B ---- XY <--(master) 
\ 
    X ---- Y <--(development) 

,現在更多的工作發生在開發

O ---- A ---- B ---- XY <--(master) 
\ 
    X ---- Y ---- Z <--(development) 

那麼,如何最好的去合併ž到我的主分支?如果我已經做了Z到主的定期合併,那麼git會知道Y是Z和M的共同祖先(但我沒有M;我做了一個壓扁,所以我有XY),並且我可以做另一個沒有問題的合併。

如果我有我的基期開發分支上的主人,我不得不

O ---- A ---- B ---- X' ---- Y' <-- (master) 
           \ 
           Z <-- (development) 

這也行,只要我的底墊中並沒有亂了別人的歷史(因爲它也許早就如果X和Y已經發布了,但這是另一種蠕蟲)。

在這兩種情況下,我可以做另一個合併或重新設置沒有問題。但是這樣做壁球合併我已經糊塗混帳到看到兩種歷史記錄沒有他們之間的良好關係記錄,所以,除非我已經把一個裁判指着Ÿ我的運氣

O ---- A ---- B ---- XY <--(master) 
\ 
    X ---- Y ---- Z <--(development) 
     ^- (last_merge) 

,而且,作爲你已經注意到,git status將永遠困惑,如果你走這條道路。

+0

因此,沒有辦法在版本的主服務器上創建一個單獨的提交併將分支鏈接到網絡圖中? – vsjn3290ckjnaoij2jikndckjb

+0

@ismay是的:定期合併提交。 – mkrieger1

+0

在我看來,這是一個正常的合併。你能幫我理解你想要的與正常合併不同嗎? –

相關問題