Подтвердить что ты не робот

Как вы находите родителя названной ртутной ветки?

В какой-то момент времени у вас есть дочерняя именованная ветвь, позвольте ей поименовать ее, по умолчанию, и вы создадите ветку с именем по умолчанию, позвоните, foo и сделайте некоторые коммиты на foo. Эта работа выглядит примерно так:

hg update default
hg branch foo
hg commit -m "created branch foo"
# work, work
hg commit
# work work
hg commit

Между тем другие делают фиксации по умолчанию. Теперь кому-то еще говорят сделать некоторую работу над foo, и они хотят узнать, может ли и что может понадобиться объединить с родительской ветвью foo. Если бы они знали, что foo пришел из-за дефолта, они могли просто запустить:

hg merge --preview default

но они не знают, откуда пришел foo. Они могут запускаться:

hg glog

или запустите черепаху и проследите линию до родителя foo, но есть ли команда, которую они могли бы запустить, которая просто сообщила бы им родительскую ветвь foo?

4b9b3361

Ответ 1

Спасибо за примеры отсрочки. Я возился и нашел это решение, которое я вроде как:

hg log -r "parents(min(branch(foo)))"

который будет печатать ревизию, на которой была основана первая фиксация на ветке foo. Вы можете искать ветвь (или ее отсутствие, указывающую ветвь по умолчанию) в этом наборе изменений и которая является родительской ветвью foo (по крайней мере, как родительская ветвь определена в вопросе).

Но у меня есть это ворчащее чувство... родители() могут вернуть более одного набора изменений. Может ли первая фиксация на ветке иметь двух родителей? Я не могу придумать, как это может произойти.

Ответ 2

Вы можете использовать revsets, чтобы найти эту информацию, если используете Mercurial v1.6.0 или новее. Например:

hg update BRANCH
hg log -r "max(ancestors(BRANCH) and not branch(BRANCH))"

это напечатает одну ревизию, "точку ветвления" вашей ветки функции.

Ответ 3

Предполагая, что у вас Mercurial v1.7 или новее, это можно сделать с помощью отсрочки.

hg log -r "ancestor(<changeset>, <changeset>)"

где changeset может быть веткой, тегом, ревизией или хэшем изменения.

Это будет печатать самый большой общий предок двух наборов изменений.

Если общего предка нет, тогда результат пуст.

Ответ 4

На основании ответа @krupan я придумал следующее:

hg log --rev "parents(min(branch(.)))" --template "{branch}\n"

Это будет печатать только имя родительской ветки.

  • --rev "revset expression" указывает revset с использованием выражения отсрочки.
  • branch() выбирает все ревизии указанной ветки.
  • min() выбирает первую ревизию указанного диапазона версий.
  • parents() выбирает родителей указанного диапазона версий.
  • . указывает текущую ревизию. В качестве альтернативы вы можете указать любую ревизию по имени.
  • --template "{branch}\n" указывает настраиваемый шаблон, который печатает только название ветки.

Ответ 5

для меня также работал:

hg log --only-branch $(hg branch) | tail -n 10 | grep parent