Mercurial revset выбирая до закладки
Если у меня есть эти наборы изменений в моем хранилище
A --> B --> C --> D
*
B отмечен закладкой, а D на кончике - как мне создать revset, который будет выбирать все между B и D, но не B.
В частности, я пытаюсь раздавить C и D в B, что-то вроде:
hg strip -r "bookmark:." -k
кроме этой строки также удалит коммит B, который я хочу сохранить.
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()
здесь предполагается только одна дочерняя ревизия).
Не забудьте включить расширение rebase в файле hgrc для этого.
Вы можете использовать histedit
расширение для достижения этого. Просто наберите hg histedit c561b4e977df
(где c561b4e977df
хеш ревизии B в вашем примере). Затем введите fold
рядом с ревизиями C и D в появившемся редакторе. Это свернет ревизии C и D в B.