如何将命名分支与Mercurial中的不同变更集相关联?

如何将命名分支与Mercurial中的不同变更集相关联?,mercurial,Mercurial,我将一个存储库从Git转换为Mercurial,并为我们的产品开发创建了一个命名分支production。不幸的是,一周后,我们才意识到生产分支位于错误的变更集中 尽管我们已经对存储库做了很多更改,但是还没有提交到生产分支。我需要以某种方式将生产名称与正确的变更集重新关联,或者删除分支并重新创建它 这样做的最佳方式是什么?如果没有“提交到生产部门”部门,则该部门不存在。在mercurial的命名分支中,分支名称是提交的变更集上不可擦除的标签。变更集永远不会更改它所在的分支。我将假设您至少有一个带

我将一个存储库从Git转换为Mercurial,并为我们的产品开发创建了一个命名分支
production
。不幸的是,一周后,我们才意识到
生产分支位于错误的变更集中

尽管我们已经对存储库做了很多更改,但是还没有提交到
生产分支。我需要以某种方式将
生产
名称与正确的变更集重新关联,或者删除分支并重新创建它

这样做的最佳方式是什么?

如果没有“提交到
生产部门”
部门,则该部门不存在。在mercurial的命名分支中,分支名称是提交的变更集上不可擦除的标签。变更集永远不会更改它所在的分支。我将假设您至少有一个带有
生产
分支标签的变更集,否则这将变成一个毫无问题的问题

如果你采取这些行动,我想你会没事的:

  • hg更新
    您希望的版本是生产负责人
  • hg branch production
    这只是说下一次提交应该有生产标签
  • hg commit
    您现在将有一个标签为
    production
  • 现在,当人们对纯生产进行克隆时:

    hg clone repopath#production
    

    或者更新它

    hg update production
    

    他们会得到你想要的发展分支。旧的变更集仍然(并且将始终)具有
    生产
    标签,但这可能没问题。如果真的不行,你可以重建repo并从那些提交中删除标签,但是上面的过程让人们克隆/更新
    生产
    正确的东西,所以你应该没事。

    你可以很容易地通过
    mq
    扩展来完成。显然,这需要每个人都获得存储库的新克隆

    如果
    production
    分支是在变更集869中创建的,并且您希望它在变更集842上,您可以说:

    hg strip 869
    hg update 842
    hg branch production
    

    这将从存储库中删除变更集869(及其所有子代),重新编号任何后续变更集以填补空白,然后将
    生产
    名称分配给正确的变更集。

    我刚刚尝试了这个,但它不起作用<代码>hg分支生产
    显示“中止:已存在同名分支(使用“hg更新”切换到该分支)”
    hg strip 869
    hg update 842
    hg branch production