我有两个名为 X 和 Y 的分支。X 是先前创建的,y 是最新的。现在我在分支'Y',我修改了一些文件。我需要提交已修改的文件,并且需要将更改提交到“X”分支而不是“Y”分支。如何使用 Mercury Hg 或 Tortoise Hg 做到这一点?(如何切换到“x”分支并提交更改?)
3 回答
如果您尚未提交更改,那么您应该能够执行以下操作:
hg update X
hg commit
除非您在文件中的相同位置更改了一些相同的文件,否则这应该足够了。如果你有,那么你的hg update X
命令应该失败。此时您有几个选择。
您可以使用 Mercurial 队列 (mq)。
您可以将当前更改放入补丁队列:
hg qnew stufftomove -e
您将看到用于创建提交消息的任何编辑器。继续并在最终提交时使用您想要的任何内容填写您的提交消息。如果你不使用 -e,它只会创建没有提交消息的补丁队列。稍后,您可以根据需要使用提交消息hg qrefresh -e
。
创建补丁队列后,使用以下命令将其弹出:
hg qpop
现在移动到 X 分支:
hg update X
现在推送补丁队列。这将应用补丁文件:
hg qpush
这可以干净地进行,或者如果您确实有合并冲突,您将收到一条消息,表明 .rej 文件已创建。这些向您显示无法自动应用的更改部分。
如果您有 .rej 文件,请手动应用不起作用的部分,然后运行 hg qrefresh
这将使用新更改更新补丁文件。
当一切看起来像您想要的那样时,您可以将补丁队列转换为真正的提交
hg qfinish stufftomove
您的文件更改现在应该提交到您希望它们所在的分支上。
或者,如果您已经在错误的分支上提交了更改,并且没有将您的更改推送(或将它们拉取)到远程存储库,您可以这样做:
hg qimport -r <revision to import>
此时,继续上述以 开头的说明hg qpop
。
如果您可以更具体地了解文件和分支的状态,我可以更具体地提供帮助。无论如何,我希望这会有所帮助。
旁注:如果您在上述步骤中遇到合并冲突并且不喜欢处理 .rej 文件,您可以使用hg rebase
它来解决您最喜欢的合并工具(或您已配置的任何工具)中的冲突)。希望这可以帮助。
你可以
- 提交到 Y 分支
- 然后将其移植/坟墓到X分支
- 然后从 Y 分支中剥离变更集
结果,看起来您将其提交给 X 而不是 Y
我使用 Shelving 进行此类操作:https ://tortoisehg.bitbucket.io/manual/2.9/shelve.html
当您在“Y”分支时,将所有更改放到架子上。然后切换到“X”分支并从您的架子上恢复更改。