Mercurial: найти все ветки, в которых существует commit - PullRequest
4 голосов
/ 23 августа 2011

У меня есть несколько веток и коммит с идентификатором X, я хочу, чтобы Mercurial вернул мне список ветвей, где этот коммит существует.

Mercurial уже хранит информацию о ветке в каждом коммите, но только о ветке, в которой был введен этот коммит. Если вы объедините этот коммит с какой-либо другой веткой, то коммит все равно будет хранить только оригинальное имя ветки.

1 Ответ

10 голосов
/ 23 августа 2011

Я думаю, что вы можете получить то, что вы хотите с этой формулой

hg log -r 'descendants(X) and head()'

head() включает в себя все именованные ветви веток, поэтому даже если кончик ветви был объединен с другой именованной веткой, он будетвсе еще перечисляются с этой формулой.

Если вы хотите показывать только имена ветвей, вы, вероятно, захотите использовать директиву --template '{branches}\n' для команды hg log.Если у вас есть более одной головы на названную ветвь, вы можете использовать uniq или подобное.

РЕДАКТИРОВАТЬ: Чтобы описать, что это будет делать

A----B----C----D----E  Branch: default (E is a merge of F into D)
      \    \    \ /
       \    \    F     Branch B1 (closed)
        \    G-----H   Branch B2
         \    \
          \    I       Branch B2
           J           Branch B3

Если вы выполните hg log -r 'descendants(C) and head()', вы должны получить E, F, H и I.

  • E : Вы получаете E, потому что default является заголовком ветви, даже если у него есть специальное имя.
  • F появляется, потому что даже если вы слились с E, это все равно head(), поэтому он отображается в этом списке
  • G не является головой, хотя она содержит C
  • H является головой и явно является потомком C
  • I , разветвленного от G,также является головой, и ясно содержит C
  • J является головой, но не имеет C в качестве предка
...