Mercurial在另一个分支移动提交
我的同事偶然在默认分支中做了两个提交,而不是创build新的自己的开发分支。
我怎样才能改变这种情况,并将这两个提交到一个新的分支?
一个重要的问题
意外的提交到达了其他库吗?还是仅仅是自己的? 如果是这样,你可以跳到下面的部分“也许猫还在袋子里”,否则你可能有一些工作要做。
你不是一个人
有关如何在堆栈溢出的其他地方纠正问题的更多讨论,请参阅此处 。 所描述的是“正确的”途径
- 导出一个补丁
- 创build分支
- 导入补丁
- 删除以前的提交。
也许这只猫还在包里
如果更改只在本地副本中,则更简单的解决scheme是
- 创build新的分支
- 切换到它
- 将这些改变合并到你最喜欢的合并工具( 去Meld )或hg嫁接
- 使用hg strip命令删除旧的brach上的更改
- 把变化推向世界
- 假装什么也没有发生,吹口哨快乐的调子…
想象一下下面的场景:
D | C | "I want to move C and D here" B/ | A
脚步:
-
hg update B
-
hg branch "mybranch"
-
hg commit --message "Create my branch"
-
hg update mybranch
-
hg graft -r C
-
hg graft -r D
-
hg strip -r C
(这应该是修改版C原来的)strip
命令由您需要启用的扩展提供。 您可以按照如何在Mercurial Wiki上启用它的指南 。 -
hg update default
上面的两个答案都是正确的,但假设还没有推出提交 ,还有第三种方法。
我刚刚成功地使用了rebase
命令将一串提交移动到我已经忘记创build的主题分支。
我首先更新了我想创build分支的修订,然后我把这个新分支的错误分支中的最早的分支重新分配给ta-da。
需要更多时间来解释它,而不是使用TortoiseHg甚至是命令行。