Mercurial如何回滚到标签?

时间:2011-01-12 16:39:39

标签: mercurial dvcs

我对如何回滚到Mercurial中的标记感到有些困惑。 (我很新)

假设我有一个名为“Version-1.0”的标签,这是几个修订版。让我们说我们现在在r400

现在,如果我的经理要告诉我他们不喜欢事情的发展方向,并且基本上想要从那个标签上抛弃所有内容并返回到1.0版本。

我可以通过以下方式结帐该标签:

  

hg update -r Version-1.0

好的,现在我回到版本1.0标签,如果我永远不需要进行更改,那就没关系了。但是,只要我进行更改并提交,我现在有2个头(我对版本1.0的新更改和r400管理者想要抛弃的东西)。

所以现在我需要与r400合并。我不想。 (我真的不想消除地球上所有这些变化,我希望它们留在我的历史中,以便如果管理层再次改变主意我可以回到他们身边)但我现在不想要他们中的任何一个

我该怎么办?


更新

答案说明:

  

您可以将整个存储库克隆到标记,然后将该克隆用作“新”中央存储库。

如果我的中央存储库由bitbucket托管,我不知道如何做到这一点。如果当前的URL位于URL https://jisaacks@bitbucket.org/jisaacks/hgml,并且我想将其克隆到标记为新的名为hgml2的仓库(尚不存在),我在我的机器上本地尝试了此命令: / p>

hg clone -r Version-1.0 https://jisaacks@bitbucket.org/jisaacks/hgml https://jisaacks@bitbucket.org/jisaacks/hgml2

我收到此错误:

  

abort:无法创建新的http存储库

3 个答案:

答案 0 :(得分:3)

登录bitbucket并单击右上角的“Fork”箭头图标。现在,您可以打开“高级设置”以从标记中分叉。

然后,您可以将第一个存储库重命名为“myproject-abandoned-foo-changes”,并重用分叉存储库的原始名称,然后继续开发。

修改:您还可以执行no-op merge。链接的维基页面解释说这可能不好,因为您的历史记录会被不必要的更改所污染,但我认为在您的情况下,这可能正是您想要的,因为它会保留您的更改,同时避免“将所有内容切换到新的回购” “你抱怨的问题。

答案 1 :(得分:1)

在现代Mercurial中执行此操作的“正确”方法是关闭分支:

hg up head-i-dont-like
hg commit --close-branch

虽然这最初被添加到关闭的命名分支,但它与匿名分支(OP具有的)同样有效。特别是,只会影响它所提交的头部,而不会影响同一命名分支上的任何其他头部。

答案 2 :(得分:0)

您可以使用hg revert。以下命令将存储库还原到某个标记,并丢弃所有本地更改。

hg revert -r tagname --all