我有一个未提交的变更集。我注意到我目前在错误的分支上,所以在我提交之前,我想切换到我想要的分支,然后提交。
在Hg中实现这有多难?
答案 0 :(得分:5)
如果当前父修订版与目标修订版之间存在线性路径,则可以发出
hg update right-branch
和Mercurial会将工作副本中的更改合并到目标修订版中。
这是使用完整合并工具机器完成的,所以重新命名等内容会被考虑在内,如果发生冲突,您将获得一个三向合并程序。基于搁置和差异的方法缺乏这一点,并要求您使用.rej
文件手动修复冲突。您甚至可以使用hg resolve --list
查看当前的合并状态,并重新合并所选文件,因为Mercurial会为您进行必要的备份。
如果没有线性路径,您将收到此警告:
abort: crosses branches (merge branches or use --clean to discard changes)
然后,您可以通过首先更新回共同的祖先,然后再次向前更新来获得您想要的内容。我不是百分之百确定我们发出此警告的原因,但如果您感到好奇,搜索邮件列表档案应该会给您答案。
答案 1 :(得分:3)
如果您想在没有搁置扩展的情况下执行此操作,请执行以下操作:
hg diff --git > ../work_in_progress.patch
hg up desired-branch
hg import --no-commit ../work_in_progress.patch
../work_in_progress.patch
可以是您想要的任何路径(我通常将我的补丁存储在我的存储库上方),而desired-branch
是您实际想要应用更改的分支。
请注意,如果您所在的分支机构与您要使用的分支机构不同,以至于您的补丁程序无法顺利应用,那么我发现的任何解决方案都会崩溃。在这种情况下,您开始必须手动解决冲突。
答案 2 :(得分:2)
如果您正在使用TortoiseHg,那么使用THG(http://tortoisehg.bitbucket.io/manual/2.9/shelve.html)的搁置能力很容易实现。在提交对话框中,只需单击“搁置”按钮(其图标是叠加了Z的文件),然后单击右箭头以搁置所有更改。关闭搁置对话框,更新到正确的变更集,打开搁置对话框并单击左箭头以取消搁置它们。
如果您没有使用THG,可以安装hgshelve扩展程序(https://www.mercurial-scm.org/wiki/ShelveExtension),但我不熟悉它。
似乎您也可以使用Mercurial Queues(http://mercurial.808500.n3.nabble.com/Shelve-extension-td802439.html)获得相同的结果。
答案 3 :(得分:1)
不幸的是,Mercurial不支持开箱即用,因此您需要进行临时提交并使用rebase
或tramsplant
将其传输到正确的分支,或者制作差异并手动应用它。您还可以使用第三方搁置扩展程序,请参阅https://www.mercurial-scm.org/wiki/ShelveExtension和https://www.mercurial-scm.org/wiki/AtticExtension