使用Mercurial合并一些修订而不是其他修订

时间:2011-04-21 02:27:53

标签: mercurial merge branch

我最近开始使用Mercurial跟踪项目的更改。在我开始处理某个功能之前,我做了几次修改。现在,我想在实现该功能之前回到我的修订版,并尝试以一种非常不同的方式实现它。但是,我希望在第一次实现时保留一些更改,因为无论我选择哪种实现,它们都适用。

在开始实现该功能之前,更新回到修订版的最佳方法是什么,但是有选择地将默认分支中的更改合并到一个新的独立分支中?这是与Mercurial合并/分支的正确方法吗?如果我这样做,我可以稍后“删除”其中一个分支,转而支持此功能的一个特定实现吗?

2 个答案:

答案 0 :(得分:3)

如果你有像Beyond Compare这样的外部差异程序,这很容易。

  1. 启用extdiff扩展程序并将其配置为使用您的差异程序(例如,我已将系统设置为hg bcompare将运行Beyond Compare)
  2. 将您的repo的工作目录更新为要启动新分支的修订版。
  3. 使用Mercurial通过实验性更改对头部运行diff程序。
  4. Cherry从实验代码中选择您想要的更改,无论是整个文件还是文件中较小的差异。
  5. 当您退出diff程序时,您的工作目录将包含您选择的更改。
  6. 启动新分支(hg branch)或设置书签(hg bookmark)以跟踪此新的更改集。有关差异的说明,请参阅http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/
  7. 提交更改,然后离开!
  8. 当您决定所需的实施时,您可以更新到您想要的分支机构的负责人,并使用hg commit --close-branch将其标记为已关闭,但仍然会将其保留为已关闭作为存储库中的头。如果您想将其作为头部删除,请更新到您执行想要的分支主管并使用hg merge --tool internal:local <rev-of-the-other-head>进行合并,但保留所有想要的更改。

答案 1 :(得分:1)

我知道这个问题有点陈旧,但今天我在处理一个项目时碰到了类似的问题。我花了几天的时间去尝试默认分支上的一个功能。这是我用来使代码库恢复良好状态的过程。

  1. 我更新回到最后一个好的修订版(在我的情况下,R0!)via hg update -R 0
  2. 我为该功能创建了一个新分支( hg分支NEWFEATURE hg commit
  3. 我开始采摘樱桃 通过移植从其他分支提交( hg移植-b 默认revNumberToPick
  4. 移植现已在mercurial的包装盒中发货,只需要您启用它。该文档位于Mercurial wiki。希望这有帮助!