6

我有 5 个可从本地 Mercurial 存储库推送的传出变更集,我现在只想推送其中一个。这一变更集位于所有可用变更集的中间。

例如,我有以下修订:

  • 6639
  • 6546
  • 6545
  • 6544
  • 6543

我只想推6545。有什么简单的方法吗?

4

3 回答 3

15

您只能将连续的变更集列表推送到所需的值。

所以

hg push -r 6545

会推6543..6545

而且你不能仅仅6545因为没有预先的变更集而推动它的变化是没有意义的。

于 2012-10-25T21:32:42.073 回答
2

您可以使用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应用并推送了修订版(但现在使用了不同的修订版号),并且您的其余更改已应用但未推送。

于 2012-10-26T10:02:37.740 回答
1

你想要的是不可能的。修订必须使存储库处于确定状态,但如果您可以推送 6545 并将远程存储库更新到它,它将不包括来自早期(未推送)修订集的更改。这违背了 mercurial 的核心设计。你可以做的是:

a) 分发包含与 6545 版相同更改的差异(补丁)。您可以通过hg diff或以其他方式执行此操作,但应用补丁与您的 6545 版没有内在联系:它是一个单独的修订版,“发生”到做同样的改变。如果幸运的话,它们将来可以毫无问题地合并。或者

b) 临时(使用 mq 扩展)或永久(使用帮助rebase或其他扩展)重写您的历史记录,以便在已经提交的修订之后立即放置 6545。然后,您可以像任何其他已推送其祖先的修订版一样推送它。

于 2012-10-31T22:56:24.903 回答