2011-04-29 24 views
5

我剛剛將分支A合併到B中,出於某種原因,合併並不順利。我想將B還原到合併之前的位置,然後再次嘗試從未發生過的事情。我想的只是做Mercurial走出一個不好的合併

hg clone myrepo newrepo -r A -r 12345 

,其中12345是前B的不良合併的修訂版號碼

我想這樣的作品,但我有很多其他部門(其中大部分是使用提交封閉的 - -close-branch),這會使這些分支回到非活動狀態。

有沒有辦法克隆除修訂123456之外的所有東西? (其中123456是B上的錯誤提交)

+0

你是否將提交與壞合併在它的某個地方? – 2011-04-29 15:04:06

+0

@Lasse不,它只對我本地 – 2011-04-29 15:06:38

回答

10

假設你沒有推合併變更任何公共場所,最簡單的解決方法是使用自帶的水銀隊列(即mq)擴展hg strip命令。

wiki

hg strip rev刪除rev修訂 並從 庫及其所有後代。要刪除不需要的 分支,您需要指定特定於該分支的第一個 版本。默認情況下,,hg strip將在.hg/strip-backup/目錄中放置備份 。如果 條原來是一個壞主意,你可以 符合HG鬆綁 .hg/strip-backup/filename.

+0

Strip不僅可以刪除分支及其修訂版本,而且還可以將該分支從任何分支合併到另一個分支中,這可能有意義,但將我搞砸了。 – nicodemus13 2014-02-20 16:43:35

1

我希望我能正確理解你的情況。如果我是你應該能夠在合併之前更新到B的修訂版本,那麼給這個修訂版一個新的分支名稱,將A合併到它,然後繼續。您可能需要將原始B分支標記爲已關閉。

$ hg up 12345 #12345 is the revision of B prior to the merge 
$ hg branch B-take2 
$ hg merge A 
$ hg commit -m 'merge A in to B-take2' 

$ hg up B 
$ hg commit --close-branch -m 'mark original B branch as closed' 
+0

我想過這個,但是我確信必須有另一種方式,而不必弄亂我的分支名稱 – 2011-04-29 15:06:17

+0

我不認爲這是存在的。可能是我最大的問題與mercurial是其分支名稱的永久性。 – 2011-04-29 15:24:54

+0

我想你可以在合併之前的版本和分支的頭部之間應用差異的反轉。這將有效地扭轉作爲合併的一部分引入的更改並讓您處於同一分支上。它可能會變得混亂,但它可能值得一試。 – 2011-04-29 15:26:18

1

恢復爲時已晚使用hg rollback命令?如果是這樣,請嘗試使用hg backout命令。

+7

退出並不適合合併,你不會最終以兩個頭後,你必須選擇其中之一。 Rollback,Strip或部分克隆是要走的路。 – 2011-04-29 15:48:55

2

它可能不如hg回滾,但通常我所做的是更新到頭A,在以前的頭B合併,檢查我這次是否正確,然後dummy-merge遠離錯誤的合併。