Mercurial回滚和重建

Mercurial回滚和重建,mercurial,Mercurial,我们有两个mercurial命名分支,开发和测试。开发中有很多变化,这些变化本应合并到测试中。在某一点上,更改被合并,然后回滚。那么合并的尝试方向可能是错误的。结果是,我们现在有两个分支具有最近的公共父级。我们在开发过程中仍然有一些变化,这些变化还没有经过测试。但是由于我们所犯的错误和共同的父级,将开发合并到测试并没有任何作用,也就是说,它不应用任何更改 如果我愿意将测试退回几周,我是否可以像这样切换到测试分支: hg update <last good test revision>

我们有两个mercurial命名分支,开发和测试。开发中有很多变化,这些变化本应合并到测试中。在某一点上,更改被合并,然后回滚。那么合并的尝试方向可能是错误的。结果是,我们现在有两个分支具有最近的公共父级。我们在开发过程中仍然有一些变化,这些变化还没有经过测试。但是由于我们所犯的错误和共同的父级,将开发合并到测试并没有任何作用,也就是说,它不应用任何更改

如果我愿意将测试退回几周,我是否可以像这样切换到测试分支:

hg update <last good test revision>
hg更新
然后从dev“移植到本地”我们想要转移到测试的十几个更改,然后在开发中合并以重置测试的公共父级


这是一个疯狂的计划,还是有更简单的方法?

如果只是十几个更改,您确实可以
更新到良好的测试版本
重新开始,并
移植到本地
重新创建完美分支所需的提交

只有当您对新的banch头部感到满意时,使用合并两个头部并忽略坏的
test
头部。你需要在你的分支上有一个单一的头

现在您将处于一种状态,
test
将保存
开发
分支的所有更改。我建议您再次使用相同的技巧将
开发
合并到中,以生成所需的
测试
的公共父级,但不存在
开发
中可能发生的所有污染。如果它不起作用,只需在
development
上创建一个虚拟变更集,然后再次重试该技巧(如果有意义的话)

然而,最终,您似乎并不太担心
开发
分支被
测试
分支污染。往那个方向走行吗

这是一个疯狂的计划还是有更简单的方法

是的,是的。短脑力(而不是驴力)平原

普通A

  • 将脏的存储库克隆到新的存储库中,而不使用愚蠢、愚蠢、愚蠢的更改集(
    hg Clone-r LAST\u GOOD\u CSET
  • 将脏回购换成抛光回购
普通B

  • 将脏存储库克隆到新存储库(可选)
  • 为有问题的存储库启用strip | | histedit扩展(您要清理该存储库)
  • 仔细阅读与扩展相关的文档,以便在大脑中使用命令和工作流,而不是盲目地使用
  • 从存储库中删除错误的变更集
  • 用抛光剂更换(如果第1页已完成)脏回购

这两种方法的问题是最后一步,更换回购。这涉及到同步环境中的每个repo,以重新克隆新的repo,并使用它而不是旧的repo。我当然不会认为它们在任何大小的环境中都更简单。另外,您仍然需要处理来自“good rev”的更改。而所有这些艰苦的工作只是为了获得一个干净的历史而没有嫁接?@Vince-任何团队的沟通都是必须的。我看不出“重新克隆回购”广播消息中的问题-如果teamlead有头脑和良好的素质,这不仅仅是沟通问题,例如,即使您可以让所有非现场团队为此保持一致,您仍然容易受到来自旧回购的意外推送。你知道他们以前也犯过错误。。。除非你另外创建了一个钩子来防止它,这是一个更大的工作,还有另一个故事。这是有效的。我在重新应用更改时仍然存在问题,但这项技术实际上回滚了更改。谢谢