¿Cómo listar ramas que contienen una confirmación dada?


¿Cómo puedo consultar git para averiguar qué ramas contienen una confirmación dada? gitk usualmente listará las ramas, a menos que haya demasiadas, en cuyo caso solo dice "muchas (38)" o algo así. Necesito saber la lista completa, o al menos si ciertas ramas contienen el commit.

Author: ThiefMaster, 2009-09-14

2 answers

De la página de manual de git-branch :

 git branch --contains <commit>

Solo lista las ramas que contienen el commit especificado (HEAD si no se especifica). Implica --list.


 git branch -r --contains <commit>

Listas seguimiento remoto de ramas también (como se menciona en user3941992 's respuesta a continuación) que es "ramas locales que tienen una relación directa con una rama remota".


Ver también este git ready artículo.

La etiqueta --contains averiguará si un determinado commit ha sido introducido en tu rama. Tal vez tengas un SHA de COMMIT de un parche que pensaste que habías aplicado, o simplemente quieres comprobar si commit para tu proyecto de código abierto favorito que reduce el uso de memoria en un 75% está todavía.

$ 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

Nota: si la confirmación está en una rama de seguimiento remoto , agregue la opción -a .
(as MichielB comments infra )

git branch -a --contains <commit>

MatrixFrog comenta que solo muestra qué ramas contienen esa exacta confirmación.
Si quieres saber qué ramas contienen un commit "equivalente" (es decir, qué ramas han elegido ese commit) eso es git cherry:

Porque git cherry compara el conjunto de cambios en lugar del id de confirmación (sha1) , puede usar git cherry para averiguar si se ha aplicado una confirmación que hizo localmente <upstream> bajo un id de confirmación diferente.
Por ejemplo, esto sucederá si estás alimentando parches <upstream> por correo electrónico en lugar de empujar o tirar confirmaciones directamente.

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

(Aquí, las confirmaciones marcadas '-' no se mostrarían con git cherry, lo que significa que ya están presentes en <upstream>.)

 1216
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-07 22:24:33

Puede ejecutar:

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

Del comentario de la última confirmación en la salida puede encontrar rama original nombre

Ejemplo:

       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
 12
Author: Eugen Konkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-29 13:58:20