it-swarm.com.ru

Как составить список веток, содержащих данный коммит?

Как я могу запросить git, чтобы узнать, какие ветви содержат данный коммит? gitk обычно перечисляет ветви, если их не слишком много, и в этом случае он просто говорит "много (38)" или что-то в этом роде. Мне нужно знать полный список или, по крайней мере, содержат ли определенные ветви коммит.

984
Andrew Arnott

Со страницы страница руководства git-branch :

 git branch --contains <commit>

Только те списки веток, которые содержат указанный коммит (HEAD, если не указан). Подразумевает --list.


 git branch -r --contains <commit>

Списки ветви удаленного отслеживания, а также (как указано в ser3941992 's ответ ниже), то есть "локальные ветви, которые имеют прямое отношение к удаленной ветви".


Смотрите также эту git ready статью.

Тег --contains определит, был ли введен определенный коммит в вашу ветку. Возможно, вы получили коммит SHA из патча, который, по вашему мнению, применили, или вы просто хотите проверить, есть ли коммит для вашего любимого проекта с открытым исходным кодом, который сокращает использование памяти на 75%.

$ git log -1 tests
commit d590f2ac0635ec0053c4a7377bd929943d475297
Author: Nick Quaranto <[email protected]>
Date:   Wed Apr 1 20:38:59 2009 -0400

    Green all around, finally.

$ git branch --contains d590f2
  tests
* master

Примечание: если фиксация выполняется в ветка удаленного отслеживания , добавьте параметр -a.
(как MichielB комментарии ниже )

git branch -a --contains <commit>

MatrixFrog комментирует, что показывает только то, какие ветви содержат точную фиксацию.
Если вы хотите знать, какие ветви содержат "эквивалентный" коммит (т. Е. Какие ветви выбраны из вишни, этот коммит), то это git cherry:

Поскольку git cherry сравнивает набор изменений, а не идентификатор фиксации (sha1) , вы можете использовать git cherry, чтобы узнать, был ли применен локально принятый коммит <upstream> под другой идентификатор фиксации.
Например, это произойдет, если вы отправляете патчи <upstream> по электронной почте, а не нажимаете или извлекаете коммиты напрямую.

           __*__*__*__*__> <upstream>
          /
fork-point
          \__+__+__-__+__+__-__+__> <head>

(Здесь коммиты с пометкой '-' не будут отображаться с git cherry, то есть они уже присутствуют в <upstream>.)

1330
VonC

Вы можете запустить:

git log <SHA1>..HEAD --ancestry-path --merges

Из комментария последнего коммита в выводе вы можете найти оригинальная ветка имя

Пример:

       c---e---g--- feature
      /         \
-a---b---d---f---h---j--- master

git log e..master --ancestry-path --merges

commit h
Merge: g f
Author: Eugen Konkov <>
Date:   Sat Oct 1 00:54:18 2016 +0300

    Merge branch 'feature' into master
17
Eugen Konkov