Как вы находите родителя названной ртутной ветки?
В какой-то момент времени у вас есть дочерняя именованная ветвь, позвольте ей поименовать ее, по умолчанию, и вы создадите ветку с именем по умолчанию, позвоните, 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?
Ответы
Ответ 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