Mercurial在另一个分支移动提交

我的同事偶然在默认分支中做了两个提交,而不是创build新的自己的开发分支。

我怎样才能改变这种情况,并将这两个提交到一个新的分支?

一个重要的问题

意外的提交到达了其他库吗?还是仅仅是自己的? 如果是这样,你可以跳到下面的部分“也许猫还在袋子里”,否则你可能有一些工作要做。

你不是一个人

有关如何在堆栈溢出的其他地方纠正问题的更多讨论,请参阅此处 。 所描述的是“正确的”途径

  • 导出一个补丁
  • 创build分支
  • 导入补丁
  • 删除以前的提交。

也许这只猫还在包里

如果更改只在本地副本中,则更简单的解决scheme是

  • 创build新的分支
  • 切换到它
  • 将这些改变合并到你最喜欢的合并工具( 去Meld )或hg嫁接
  • 使用hg strip命令删除旧的brach上的更改
  • 把变化推向世界
  • 假装什么也没有发生,吹口哨快乐的调子…

想象一下下面的场景:

D | C | "I want to move C and D here" B/ | A 

脚步:

  1. hg update B
  2. hg branch "mybranch"
  3. hg commit --message "Create my branch"
  4. hg update mybranch
  5. hg graft -r C
  6. hg graft -r D
  7. hg strip -r C (这应该是修改版C原来的)

    strip命令由您需要启用的扩展提供。 您可以按照如何在Mercurial Wiki上启用它的指南 。

  8. hg update default

上面的两个答案都是正确的,但假设还没有推出提交 ,还有第三种方法。

我刚刚成功地使用了rebase命令将一串提交移动到我已经忘记创build的主题分支。

我首先更新了我想创build分支的修订,然后我把这个新分支的错误分支中的最早的分支重新分配给ta-da。

需要更多时间来解释它,而不是使用TortoiseHg甚至是命令行。