2015-06-07 4 views
1

Если у меня есть это ревизия в моем хранилищеMercurial revset выбор до закладки

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

Б закладки и D находится на кончике - как создать revset, который будет выбирать все между B и D, но не B.

в частности я пытаюсь раздавить C и D в в, что-то вроде:

hg strip -r "bookmark:." -k 

кроме этой линии будет также удалить B, которые совершают я хочу сохранить.

ответ

2

Я не совсем понимаю, хотите ли вы сквозировать C и D, создавая новую фиксацию C ', или хотите выкачать B, C и D, создавая новый commit 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 для этого.

+0

> Обратите внимание, что нелинейная история на этом этапе может создать неожиданные результаты - Что вы подразумеваете под этим - это неопределенный? –

+0

Это означает, что (1) разные команды могут иметь разные отношения с реверсами, которые имеют несколько изменений в голове или хвосте (2) вам может потребоваться (например) указать, как слить с rebase (используя '--tool') или (3) нужно подумать о том, как отфильтровать вывод 'hg export' на' hg import --no-commit'. Это зависит от того, что именно вы планируете делать. –

1

Для достижения этой цели вы можете использовать the histedit extension. Просто введите hg histedit c561b4e977df (где c561b4e977df - это хэш версии B в вашем примере). Затем введите fold рядом с версиями C и D в появившемся редакторе. Это сведёт изменения C и D к B.

+0

Я пытаюсь использовать это из python client api для командного сервера, поэтому я не уверен, как бы я пошел «набирать складки рядом с ревизиями» :) Я думаю, что было бы проще вручную выполнить вывод журнала, возможно, Я просто хотел посмотреть, был ли более простой способ. –