2010-06-21 43 views
3

不可否認,這是一個令人誤解的標題,但我不知道如何把它變得更好。如何在mercurial中「進一步拆分分支」?

所以我犯了錯誤,推動我所有項目的具體變化之前,我打開了一個分支。這樣,坐在不屬於那裏的默認分支中有一些變更集。他們應該在我新開的分店。

我是否必須先退出所有變更集,然後再次將它們推送到正確的分支?這甚至工作嗎?

謝謝你的幫助。

回答

6

不訴諸於EditingHistory(這通常被再次建議,並且當然是反對mercurial「不變的歷史」設計目標),這些改變將永遠在你的歷史中。但是,您可以在「提示」修訂中撤消它們,然後將它們分流到多個分支上的多個後續變更集中。

讓我們想象一下,這是你的當前歷史:

[R0] -> [R1] -> [R2] -> [R3] 

在哪裏修改R2和R3有一些東西,你的默認分支希望有的東西,你希望是在一個不同的分支。您可以創建一個新版本R4,取消R2和R3。這可以根據您的建議使用退出來完成,或者由於您正在執行多個更改集,可能更容易使用「還原」。

hg update tip ; hg revert --all -r R2 ; hg commit -m 'undid changes R2 and R3' 

那麼你的歷史看起來就像這樣:

[R0] -> [R1] -> [R2] -> [R3] -> [R4] 

,那麼你可以將工作拆分成你希望你最初做了變更,產生這樣的歷史:

[R0] -> [R1] -> [R2] -> [R3] -> [R4] -> [R5] -> [R7] 
            \ 
            --> [R6] -> [R8] 

R6和R8可以位於名爲'default'的分支上或位於不同的命名分支上。無論哪種方式,你可以通過做通R5和R7推剛R0:

hg push -r R7 

這工作,因爲一推一推修訂和其所有祖先 - 但R6和R8是不是R7的祖先,所以他們無論他們在哪個分支上都不會被推送。