2

我有两个名为 X 和 Y 的分支。X 是先前创建的,y 是最新的。现在我在分支'Y',我修改了一些文件。我需要提交已修改的文件,并且需要将更改提交到“X”分支而不是“Y”分支。如何使用 Mercury Hg 或 Tortoise Hg 做到这一点?(如何切换到“x”分支并提交更改?)

4

3 回答 3

0

如果您尚未提交更改,那么您应该能够执行以下操作:

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它来解决您最喜欢的合并工具(或您已配置的任何工具)中的冲突)。希望这可以帮助。

于 2013-11-01T06:29:46.533 回答
0

你可以

  • 提交到 Y 分支
  • 然后将其移植/坟墓到X分支
  • 然后从 Y 分支中剥离变更集

结果,看起来您将其提交给 X 而不是 Y

于 2013-10-31T12:02:49.010 回答
0

我使用 Shelving 进行此类操作:https ://tortoisehg.bitbucket.io/manual/2.9/shelve.html

当您在“Y”分支时,将所有更改放到架子上。然后切换到“X”分支并从您的架子上恢复更改。

于 2013-10-18T11:08:25.340 回答