Pregunta ¿Cómo se enumeran las ramas que contienen una confirmación determinada?


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


877
2017-09-14 04:03


origen


Respuestas:


Desde el Página de manual de git-branch:

 git branch --contains <commit>

Solo enumere las ramas que contienen la confirmación especificada (HEAD si no se especifica). Implica --list.


 git branch -r --contains <commit>

Liza sucursales de seguimiento remoto también (como se menciona en usuario3941992es responder a continuación) que son "sucursales locales que tienen una relación directa con una sucursal remota".


Ver también esto git listo artículo.

los --contains tag averiguará si se ha ingresado una determinada confirmación en su sucursal. Tal vez tengas un SHA de compromiso de un parche que pensabas que aplicaste, o solo quieres comprobar si aún está por confirmar tu proyecto favorito de código abierto que reduce el uso de memoria en un 75%.

$ git log -1 tests
commit d590f2ac0635ec0053c4a7377bd929943d475297
Author: Nick Quaranto <nick@quaran.to>
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, añade el -a opción.
(como MichielB comentarios abajo)

git branch -a --contains <commit>

MatrixFrog comenta que solo muestra qué ramas contienen ese exacto cometer.
Si desea saber qué ramas contienen una confirmación "equivalente" (es decir, qué ramas han seleccionado cuidadosamente esa confirmación), eso es git cherry:

Porque git cherry  compara el conjunto de cambios en lugar de la identificación de confirmación (sha1), puedes usar git cherry para saber si se ha aplicado una confirmación que realizó localmente <upstream> bajo una identificación de confirmación diferente.
  Por ejemplo, esto sucederá si estás alimentando parches <upstream> por correo electrónico en lugar de presionar o tirar commits directamente.

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

(Aquí, los commits marcados '-'no aparecería con git cherry, lo que significa que ya están presentes en <upstream>.)


1182
2017-09-14 04:08



Puede ejecutar:

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

A partir del comentario del último compromiso 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

10
2017-10-29 13:53