我在功能分支上有以下历史(顶部最近提交)的mercurial repo:
mergeDefaultA
|
mergeDefaultB
|
C
|
mergeDefaultD
mergeDefaultXXXX
是合并提交,是将默认分支合并到功能分支中的结果。
发生的事情是提交C被搞砸了,但是在我将mergeDefaultA
推到Bitbucket之后才发现这一点。我想要的是以下图片:
exactlyWhatIsInMergeDefaultD
|
mergeDefaultA
|
mergeDefaultB
|
C
|
mergeDefaultD
其中exactlyWhatIsInMergeDefaultD
确切地说是mergeDefaultD
中代码的状态。但是,everything I'm reading似乎表明您无法撤消这样的一系列提交(只返回一次),即使这样,一旦您推入“野外”,许多选项也无法使用
我如何实现这一目标?
如果这是git,我会这样做:
git revert mergeDefaultD
我如何在Mercurial中做同样的事情?
答案 0 :(得分:4)
这是我认为你想要的:
hg revert -r GOOD_REVISION_NUMBER --all
hg commit -A -m "reverting back to revision GOOD_REVISION_NUMBER"
一旦提交,一旦有人从你那里拉(或你推他们),他们将获得最新的修订,只包含好东西。如果他们想要回到糟糕的东西,你可以随时更新到那个版本:
hg update -r BAD_REVISION_NUMBER
答案 1 :(得分:1)
要扩展一下Harvtronix的回答(顺便说一下,这很好):
一种简单的方法是恢复旧版本号('GOOD')并提交。注意:还原意味着您将文件设置为与修订版“GOOD”中相同的内容,您不会在树中返回到该提交。如果你这样做了,你确实会分手并且有两个脑袋。
hg revert -r GOOD --all
hg commit -m "all is good now"
另一种方法是只丢弃修订版C(如果我正确地阅读了你的解释,它实际上只是导致问题的C)。 'hg backout'将在您的工作目录中引入C的反转,以便您可以提交它。
hg backout -r C
hg commit -m "Backed out C"
最后,最后一个选项是关闭坏分支,更新到最后一次提交,并在那里进一步提交:
hg up -r BAD
hg commit --close-branch -m "This head is bad"
hg up -r GOOD
... continue here ...