Mercurial revset选择书签

时间:2015-06-07 23:08:12

标签: mercurial mercurial-revsets

如果我在我的存储库中有这个变更集

A --> B --> C --> D
      *

B被加入书签并且D位于提示处 - 如何创建一个将选择B和D之间但不是B之间的所有内容的revset。

具体来说,我正试图将C和D压入B中,例如:

hg strip -r "bookmark:." -k

除了这一行还将删除我想保留的提交B.

2 个答案:

答案 0 :(得分:2)

我不完全清楚你是想要压缩C和D,创建一个新的提交C',或者你是否要压缩B,C和D,创建一个新的提交B',这将保留原始书签。

第一个:

hg rebase -s 'children(bookmark)' -d bookmark --collapse -m <msg>

您需要使用-m-l选项指定提交消息,否则您将被放入编辑器中。

第二个:

hg rebase -s bookmark -d bookmark^ --collapse -m <msg>

要使revset指定修订的所有后代,排除修订本身,请使用以下revset:

children(bookmark)::

请注意,此时的非线性历史记录可能会产生意外结果(特别是,此处children()的使用仅假设一个子修订版。)

请记住在hgrc文件中启用rebase扩展名。

答案 1 :(得分:1)

您可以使用the histedit extension来实现此目的。只需键入hg histedit c561b4e977df(其中c561b4e977df是示例中修订版B的哈希值)。然后在弹出的编辑器中的修订版C和D旁边键入fold。这会将修订版C和D折叠为B。