2011-05-03 21 views
4

讓我們假設它執行合併「放棄所有更改從合併...」選項,BU事故。恢復「放棄所有更改」合併效果

而這個錯誤提交已被提交到「中央」存儲庫。

如何處理這種情況,如果我需要以正確的方式合併分支變化?

命令重現的情況:

hg init mr 
cd mr 

echo "123" > file.txt 
hg add 
hg ci -m "initial" 

hg branch br 
echo "234" >> file.txt 
hg ci -m "in branch" 

hg up default 
echo "567" >> file.txt 
hg ci -m "in default" 

這些命令打開tortoisehg後,與br分支「放棄...」選項合併第二次修正(默認頭)。

UPD

這是一個關於做相反How to merge to get rid of head with Mercurial command line, like I can do with TortoiseHg? ;-)

問題,但仍無法找到如何恢復這一步:-(

回答

2

一種方法是重做在你的例子中,更新回第二個版本(在做錯誤合併之前,當前工作目錄爲parent),然後是紅色o與其他分支合併。這次做得很好。

這會給你另一個頭。

然後,合併舊的,不正確的合併,並選擇丟棄。現在,您已經有效地繞過了正確的合併。

如果您不確定步驟,進行本地克隆和實驗,您可以隨時丟棄它並重新嘗試並重試。

修訂3是舊的,不正確的合併,我選擇丟棄。在合併4和5之後,合併的痕跡消失了,一切都恢復正常。是的,歷史看起來有點時髦,但相信我,完全擺脫這種糟糕合併的清理程序遠比歷史時間表上的小木瓜更糟糕。

基本上你拙劣的合併後,這樣的場景:

  +-- botched merge 
      v 
    0---2---3 
    \ /
     1---+ 

所以你更新回你的壞合併之前所擁有的工作文件夾的父,並妥善做好另一個合併,這個時候。現在,它看起來像這樣:現在

  +-- botched merge 
      v 
    0---2---3 
    \ \/
     \ x 
     1-+-4 
     ^
      +-- good merge 

你的工作文件夾是在修訂4,所以你又合併,這次修訂3(壞的合併),並選擇放棄這些變化,你會得到這樣的:

  +-- botched merge 
      v 
    0---2---3-5 <-- final merge, discard 3 
    \ \// 
     \ x/
     1-+-4 
     ^
      +-- good merge 

這裏的TortoiseHg是如何顯示的:

history after new merges

+0

是的,我已經確切地做同樣的伎倆(因爲很明顯),但我希望這是一個*有效*解以某種方式退出錯誤的合併:-(順便說一句,你如何「畫」美妙的圖表?!?! – zerkms 2011-05-03 11:02:54

+0

哪個圖? ascii圖表或TortoiseHg嗎? – 2011-05-03 14:26:16

+0

ascii ones顯然;-) – zerkms 2011-05-03 21:56:56