2011-08-03 45 views
25

如果一個分支有兩個頭怎麼辦?幾周前,我出於某種原因遇到了這種情況,當時我並沒有合併它們,只是繼續在一個頭上開發。現在我想擺脫另一個頭。我該怎麼辦?我應該在這麼多變更集之後合併它們嗎?Mercurial:如何處理一個有兩個頭的分支

+0

的可能重複[有沒有刪除多個頭的另一種方式?(http://stackoverflow.com/questions/6867054/is-there - 另一種方式 - 刪除多頭) –

回答

28

所以,你有這樣的:

o--o--o--A--B <- older unnecessary head 
     \ 
     1--2--3--4--5--6 <- newer ‘good’ head 

...你不需要AB,絕對,100%肯定。 如果您不確定,並且AB中可能有可挽救的東西,則更好地合併這些頭以合併這些更改。正如Aaron所說,Mercurial擅長它。

現在你有兩個選擇:

  • 擺脫舊的頭,或
  • 做的,無視頭B兩個頭一個虛擬合併。

如果變更AB存在於其他存儲庫,你不用管,例如如果其他人將AB拉入他們的存儲庫,或者您將AB推送到公共存儲庫(比如Bitbucket),那麼您已經將AB放入野外,並且無法擺脫它們。你應該做一個dummy merge

$ hg up 6 
$ hg --config ui.merge=internal:local merge 

合併時,它會忽略從AB任何變化。

如果,另一方面,AB都是私人,您可以strip他們:

$ hg strip A 

(REV。A和剝奪後代;使MQ擴展,使strip可用)

或者,使您的存儲庫的新克隆無需更改集AB

$ hg clone myrepo myrepo2-clone -r 6 

(修訂版只和6祖先加入到克隆。)

+0

虛擬合併解決了我的問題,謝謝! – nrodic

-3

如果您需要保留舊分支上的更改,您應該將它們合併,這不應該是一個問題。

+4

如果我不需要這些改變? – thoslin

6

如果您提交了一些更改(將更改集添加到現有更改集),則會創建一個頭。如果相同的變更集發生多次,那麼會創建幾個頭。這沒什麼特別或不好的。

通常的解決方案是合併它們。 Mercurial非常擅長合併。結果仍然有可能在沒有任何手動工作的情況下編譯和運行。

只需運行hg merge,然後hg statushg diff查看兩者之間的變化。如果你喜歡這個結果,就提交它。如果你不喜歡它,update要麼頭清理你的工作區。

擺脫一個頭,docs explain how to do that

使用MQ,你也可以把第二個頭轉到一個獨立的分支(所以你可以保留它,但它不會打擾你)。看到這個答案:How can I create a branch for a non-tip revision in Mercurial?

相關問題