Mercurial在另一个分支中提交

voi*_*oid 51 mercurial

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

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

Jaz*_*azz 51

想象一下以下场景:

D
|
C
| "I want to move C and D here"
B/
|
A
Run Code Online (Sandbox Code Playgroud)

脚步:

  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

  • 这很棒.但是,为了能够使用它,我必须启用条带扩展.要做到这一点,我必须编辑放置在我的用户配置文件夹中的`mercurial.ini`文件并在下一行添加`[extensions]`部分然后`strip =`.更多信息可以在http://mercurial.selenic.com/wiki/StripExtension找到 (2认同)

Chr*_*ley 40

一个重要问题

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


你不是一个人

有关如何在Stack Overflow上的其他位置更正问题的更多讨论,请参见此处.所描述的是"适当"的方式

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


也许这只猫还在包里

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

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

  • +1,主要用于"也许猫还在袋子里" (2认同)
  • 如果猫仍然在袋中,移植扩展也可以帮助,再次在克隆的回购中,以确保没有任何坏的永久性变化. (2认同)

s.m*_*.m. 7

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

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

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

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

  • 一个小细节:在更新到分支修订版之后,您必须首先使用hg分支创建新分支,或者在TortoiseHg的提交窗口中设置分支名称.之后,描述的rebase工作正常并且有趣地应用新的分支名称. (2认同)