2011-04-29 63 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远离错误的合并。