我有 5 个可从本地 Mercurial 存储库推送的传出变更集,我现在只想推送其中一个。这一变更集位于所有可用变更集的中间。
例如,我有以下修订:
- 6639
- 6546
- 6545
- 6544
- 6543
我只想推6545。有什么简单的方法吗?
我有 5 个可从本地 Mercurial 存储库推送的传出变更集,我现在只想推送其中一个。这一变更集位于所有可用变更集的中间。
例如,我有以下修订:
我只想推6545。有什么简单的方法吗?
您只能将连续的变更集列表推送到所需的值。
所以
hg push -r 6545
会推6543..6545
。
而且你不能仅仅6545
因为没有预先的变更集而推动它的变化是没有意义的。
您可以使用Mercurial Queues扩展来执行此操作。您可能需要启用链接页面上详细说明的 mq 扩展。
您可以将所有修订导入队列,将它们全部从堆栈中弹出,然后在推送之前应用您想要的修订,然后再应用其余的。像这样的东西:
> hg qimport --rev 6639
> hg qimport --rev 6543:6546
> hg qpop --all
> hg qpush --move 6545.diff
Here you might have to resolve conflicts
> hg qfinish --applied
> hg push
> hg qpush --all
Again, might need to resolve conflicts here.
这使您的存储库6545
应用并推送了修订版(但现在使用了不同的修订版号),并且您的其余更改已应用但未推送。
你想要的是不可能的。修订必须使存储库处于确定状态,但如果您可以推送 6545 并将远程存储库更新到它,它将不包括来自早期(未推送)修订集的更改。这违背了 mercurial 的核心设计。你可以做的是:
a) 分发包含与 6545 版相同更改的差异(补丁)。您可以通过hg diff
或以其他方式执行此操作,但应用补丁与您的 6545 版没有内在联系:它是一个单独的修订版,“发生”到做同样的改变。如果幸运的话,它们将来可以毫无问题地合并。或者
b) 临时(使用 mq 扩展)或永久(使用帮助rebase
或其他扩展)重写您的历史记录,以便在已经提交的修订之后立即放置 6545。然后,您可以像任何其他已推送其祖先的修订版一样推送它。