Как перечислять ветки, содержащие заданную фиксацию?

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

Ответы

Ответ 1

На странице git -страница вручную:

 git branch --contains <commit>

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


 git branch -r --contains <commit>

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


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

Тег --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> под другим commit id.
Например, это произойдет, если вы загружаете исправления <upstream> по электронной почте, а не напрямую или потянув за собой.

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

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

Ответ 2

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

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