2012-10-19 50 views
3

比方說,我有以下樹結構:如何獲得git分支歷史記錄,以便在發現squash rebase之後匹配master?

A-B-C-D 
    |\E-F (branch one) 
    \G-H (branch two) 

Master history: A-B-C-D 
Branch one history: A-B-C-E-F 
Branch two history: A-B-C-G-H 

我想壁球犯B,所以各自的歷史應該像這樣:

A-C-D 
A-C-E-F 
A-C-G-H 

我發現,經過我壁球高手,當我結帳分支一兩個時,他們仍然顯示舊的歷史,當我運行git日誌。分支時git複製樹嗎?我是否需要單獨重新分配每個分支?

謝謝

+0

當你說「squash」時,你的意思是'rebase --squash'? – willoller

+0

我試圖與交互式底座擠壓,或者通過這種方法:http://stackoverflow.com/questions/495345/git-removing-selected-commit-log-entries-for-a-repository(第二個答案)。兩者都產生了相同的結果,即需要分別重新分配每個分支。 – melder

+0

是的。不管你怎麼做,你都必須分別做每個分支。這是因爲每個分支都保留自己的歷史,並且不受其他分支變化的影響。 – willoller

回答

3

是的,你需要重新分別每個分支。刪除提交B後,您將獲得

Master history: A-C'-D' 
Branch one history: A-B-C-E-F 
Branch two history: A-B-C-G-H 

其中C'和D'與C和D相似,但B從歷史記錄中刪除。分支1和分支2不受主底座的影響。結果的另一種觀點是:

A-C'-D' 
|\B-C-E-F (branch one) 
\B-C-G-H (branch two) 

其中A,不C,現在所有的分支的最近的共同祖先。

+0

然後,我想你會得到你想要的東西,如果你重新分配你的分支到'master'。 – willoller

+0

@willoller:不完全的,你從簡單的rebase中得到的是(對於分支之一)'A-C'-D'-B'-E'-F'',而B不會消失。 –

+0

不,我認爲'B'在這種情況下消失,因爲'C'將包含'B'(因爲他壓扁它,而不是刪除它)使得歷史'A-C'-E'-F' – willoller

相關問題