在Mercurial中,有没有办法(除了"Cherry pick"之外)推动变更集而不推动与不同头部相关的变更集?

Ric*_*ter 11 version-control mercurial dvcs

这个问题的答案中,Ry4an声称"你不能在不推动Changeset1的情况下推动Changeset2".

如果存储库看起来像这样,这当然有意义:

+ Changeset2
|
+ Changeset1
|
+ Original
Run Code Online (Sandbox Code Playgroud)

然而,在以下场景中似乎没有那么多意义,这是我目前所拥有的:

+ Changeset2
|
|   + Changeset1
|  /
| /
+ Original
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够将Changeset2推送回我最初克隆的存储库.Mercurial似乎不愿意让我这样做.它坚持我也推动Changeset 1 ......这是不允许的,因为它会在原始存储库中创建一个新头.显然我可以"Cherry pick",或者创建一个补丁来应用于原始存储库,但这看起来很笨拙.我错过了什么吗?

更新:我可能在我最初的问题中提到我试图从TortoiseHg GUI 执行操作.正如尼尔·Ç.在他的回答中正确地指出,Mercurial命令行允许我完成我所需要的,但是我仍然有兴趣学习是否有任何方法可以从GUI完成相同的操作.

Nia*_* C. 11

如果您在hg push没有任何命令行选项的情况下使用它,它将尝试推送本地存储库中远程存储库中不存在的每个变更集.如果你使用-r/ --rev选项,它只会推送该修订版及其祖先.在您的情况下,您需要做:

hg push --rev Changeset2
Run Code Online (Sandbox Code Playgroud)

有关hg help push详细信息,请参阅

  • 查看Steve Losh的`hg nudge`命令(http://hgtip.com/tips/advanced/2009-09-28-nudge-a-gentler-push/).这是一样的想法,但他有一些很好的解释和工作流程,你可以使用它. (3认同)