壁球合併在「我們的」分支上創建一個新的提交(在您的情況下爲主),以引入「他們的」分支(開發)的變化,就好像合併了這兩個分支。它實際上並沒有形成合並(將兩個分支聯繫在一起的多個父母提交);如果這樣做只是一個常規合併。所以git不能告訴開發的提交和添加到master的新提交相同。
我想我沒有看到正確的用例,但我發現壁球合併有點毫無意義。據我所知,這兩個世界在合併和重組之間是最糟糕的。
UPDATE - 一些澄清也許會有幫助,基於評論...
所以我們知道,常規的合併是有兩個或更多的家長單個提交。它的第一個父母是合併的「我們」分支(我們說是主人),我們合併的分支是另外的父母。這一次提交就是添加到主數據中的所有內容。
A ---- B - M
/
X ---- Y
所以這可能看起來不對,因爲git log
會分別顯示A,B,X和Y.這是默認行爲,因爲它向您展示瞭如何真正引入更改。
你可以通過說git log --first-parent
來得到更多的線性視圖,但log
不想顯示合併(meh)的補丁,所以它看起來不像線性歷史,就像你從一個南瓜或一個rebase。
但是肯定M^
等於B
,所以從主角的角度來看M
是一個單獨的提交,它引入了來自分支的所有更改。如果你希望它也記錄從X
和Y
的變化可以從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
將永遠困惑,如果你走這條道路。
[git:爲什麼我不能在squash合併後刪除我的分支?](http://stackoverflow.com/questions/41946475/git-why-cant-i-delete-my-branch-合併後) – mkrieger1