Mercurial 撤消一系列提交
Mercurial undo a series of commits
我在功能分支上有一个具有以下历史记录(最近提交在顶部)的 mercurial 回购:
mergeDefaultA
|
mergeDefaultB
|
C
|
mergeDefaultD
mergeDefaultXXXX
是将默认分支合并到功能分支的合并提交。
发生的事情是提交 C 被搞砸了,但是直到我将 mergeDefaultA
推送到 Bitbucket 之后才注意到这一点。我要的是下图:
exactlyWhatIsInMergeDefaultD
|
mergeDefaultA
|
mergeDefaultB
|
C
|
mergeDefaultD
其中 exactlyWhatIsInMergeDefaultD
字面意思就是 mergeDefaultD
中代码的状态。但是,everything I'm reading 似乎表明您无法撤消像这样的一系列提交(只有一次提交返回),即使如此,一旦您按下 "into the wild",许多选项也不可用.
如何实现?
如果这是 git,我会这样做:
git revert mergeDefaultD
如何在 Mercurial 中执行相同的操作?
这是我认为你想要的:
hg revert -r GOOD_REVISION_NUMBER --all
hg commit -A -m "reverting back to revision GOOD_REVISION_NUMBER"
一旦提交,只要有人从你那里拉(或你推给他们)他们就会得到最新的修订版,只包含好东西。如果他们真的想回到坏东西,你可以随时更新到那个版本:
hg update -r BAD_REVISION_NUMBER
扩展一下 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 ...
我在功能分支上有一个具有以下历史记录(最近提交在顶部)的 mercurial 回购:
mergeDefaultA
|
mergeDefaultB
|
C
|
mergeDefaultD
mergeDefaultXXXX
是将默认分支合并到功能分支的合并提交。
发生的事情是提交 C 被搞砸了,但是直到我将 mergeDefaultA
推送到 Bitbucket 之后才注意到这一点。我要的是下图:
exactlyWhatIsInMergeDefaultD
|
mergeDefaultA
|
mergeDefaultB
|
C
|
mergeDefaultD
其中 exactlyWhatIsInMergeDefaultD
字面意思就是 mergeDefaultD
中代码的状态。但是,everything I'm reading 似乎表明您无法撤消像这样的一系列提交(只有一次提交返回),即使如此,一旦您按下 "into the wild",许多选项也不可用.
如何实现?
如果这是 git,我会这样做:
git revert mergeDefaultD
如何在 Mercurial 中执行相同的操作?
这是我认为你想要的:
hg revert -r GOOD_REVISION_NUMBER --all
hg commit -A -m "reverting back to revision GOOD_REVISION_NUMBER"
一旦提交,只要有人从你那里拉(或你推给他们)他们就会得到最新的修订版,只包含好东西。如果他们真的想回到坏东西,你可以随时更新到那个版本:
hg update -r BAD_REVISION_NUMBER
扩展一下 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 ...