恢復

2014-03-13 76 views
6

我遇到了以下問題全部用水銀的時間,這是非常煩人:恢復

  • 我在一些版本A.
  • 我有局部變化,我打算在A之上提交或修改,但還沒有。
  • 我想去一些修訂B,但我忘了我有本地更改!
  • 我做hg update B。 Mercurial「有用地」試圖改變我在B之上應用的本地更改。這通常會導致衝突,現在它要求我解決衝突。

但是,我不想解決衝突!我不希望我的本地更改適用於B之上。我希望他們留在A,或者作爲A後的新提交,或者根據具體情況修改爲A.

有沒有辦法從這種狀態中恢復?我知道的唯一途徑是如何

  1. 修復合併衝突中B
  2. 回去A,越來越合併衝突再次
  3. 在一個
  4. 再次修復合併衝突提交我的在A的變化,並返回到B

這是很多的工作,它是毫無意義的。我不應該將我的本地更改應用於B之上,而只是將它們重新應用於A之上以應用。

如果沒有更好的方法可以從此錯誤中恢復,是否有辦法可以得到hg當您有本地更改時拒絕更新?我從來不想這麼做 - 如果我希望我只承諾本地更改並將它們重新綁定在B之上。

回答

6

更新某處後返回髒文件有點棘手。 「訣竅」是確保您的工作副本具有第一個更新後的髒文件。

你做

hg update $SOMEWHERE 

和發現的爛攤子,因爲水銀開始打開合併工具,從容地關閉合並工具,然後再運行

hg resolve --unmark --all 
hg resolve --all --tool internal:local 

是被合併,因爲你不得不改變所有的文件,以便之後在他們現在看起來像他們在你的骯髒的工作副本。這包括乾淨地合併的文件和提示合併的文件。更新回現在是可能的:

hg update $BACK 
hg resolve --unmark --all 
hg resolve --all --tool internal:local 

你現在應該回到你開始的地方。如果您在第一次更新後修改了這些文件,那麼它就是您在第二次解析後看到的修改版本。這就是爲什麼您需要在第一次更新後解析文件的原因。

+0

我花了一段時間纔再次遇到這個問題,因爲我使用'hg update'來做'hg update -c'來避免這個問題。但是,我今天遇到了這個問題,而且這種方法很好地解決了這個問題。非常感謝! – HighCommander4

3

hg update -c如果您有任何未提交的更改,將會中止更新。

+0

呃,這實際上並不是OP所要求的。它不回答原始文章中出現的2個問題中的任何一個。 – zerkms

+0

@zerkms:「當你有本地變更時,有沒有辦法讓hg拒絕更新?」不僅在那裏,而且還有粗體字... – Jon

+0

哦,對不起,我主要使用的是「-C」。那時確實有道理。 – zerkms

1

也許答案是要避免更新,如果工作目錄很髒。 以下列方式修改〜/ .hgrc應該有所幫助:

[hooks] 
preupdate = test -z "$(hg status)" 
+1

我通過將update更新爲update -c來實現了類似的功能。 – HighCommander4