Mercurial在另一个分支中提交

时间:2011-06-28 13:48:56

标签: mercurial

我的同事意外地在默认分支中进行了两次提交,而不是创建新的自己的开发分支。

如何更改此情况并将这两个提交移至新分支?

3 个答案:

答案 0 :(得分:49)

想象一下以下场景:

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命令由您需要启用的扩展程序提供。你可以follow a guide on how to enable it on the Mercurial Wiki

  8. hg update default

答案 1 :(得分:38)

一个主要问题

意外提交是否已经到达其他存储库,或者只是在他自己的存储库中?如果是这样,你可以跳到下面的部分'也许这只猫还在包里面。否则你可能会有相当多的工作要做。


你并不孤单

有关如何更正Stack Overflow上其他问题的更多讨论,请参阅here。所描述的是“适当的”#39;通往它的方式

  • 导出补丁
  • 创建分支
  • 导入补丁
  • 删除之前的提交。


也许这只猫还在包里

如果更改仅在本地副本中,则更简单的解决方案是

  • 创建新分支
  • 切换到它
  • 使用您的收藏合并工具(go Meld)或 hg graft
  • 将更改合并到该工具上
  • 使用 hg strip 命令删除旧brach上的更改
  • 将更改推向世界
  • 假装什么都没发生过,吹口哨一声快乐......

答案 2 :(得分:7)

上面的两个答案都是正确的,但是,假设一个尚未推送提交,那就是第三种方式。

我刚刚成功使用rebase命令将一串提交移动到我首先忘记创建的主题分支。

我首先更新到了我想要创建我的提交应该是的分支的修订版本,然后我在最新版本和ta-da的错误分支中重新提交了最早的提交,完成了。< / p>

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