Mercurial在另一个分支中提交

问题描述 投票:49回答:3

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

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

mercurial
3个回答
38
投票

A major question

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

你不是一个人

有关如何在Stack Overflow上的其他位置更正问题的更多讨论,请参阅here。所描述的是“适当”的方式

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

也许这只猫还在包里

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

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

50
投票

想象一下以下场景:

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

7
投票

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

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

我第一次更新到我想要创建我的提交应该是的分支的修订版本,然后我在这个新版本和ta-da的错误分支中重新提交了最早的提交,完成了。

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

© www.soinside.com 2019 - 2024. All rights reserved.