¿Cómo enumerar ramas que contienen un compromiso determinado?

Resuelto Andrew Arnott asked hace 15 años • 3 respuestas

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

Andrew Arnott avatar Sep 14 '09 11:09 Andrew Arnott
Aceptado

Desde la página del manual de git-branch :

 git branch --contains <commit>

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


 git branch -r --contains <commit>

También enumera las sucursales de seguimiento remoto (como se menciona en la respuesta del usuario3941992 a continuación), es decir, "sucursales locales que tienen una relación directa con una sucursal remota".


Como señaló Carl Walsh , esto se aplica sólo a la especificación de referencia predeterminada

fetch = +refs/heads/*:refs/remotes/origin/*

Si necesita incluir otro espacio de nombres de referencia ( solicitud de extracción , Gerrit , ...), debe agregar esa nueva especificación de referencia y recuperarla nuevamente:

git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"
git fetch
git branch -r --contains <commit>

Consulte también este artículo preparado para git .

La --containsetiqueta determinará si una determinada confirmación ya se ha incorporado a su rama. Tal vez tengas un SHA de confirmación de un parche que pensabas que habías aplicado, o simplemente quieras verificar si ya está disponible la confirmación para tu proyecto de código abierto favorito que reduce el uso de memoria en un 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

Nota: si la confirmación se realiza en una rama de seguimiento remoto , agregue la -aopción .
(como comenta MichielB a continuación )

git branch -a --contains <commit>

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

Debido a que git cherry compara el conjunto de cambios en lugar del ID de confirmación (sha1) , puede usarlo git cherrypara averiguar si una confirmación que realizó localmente se aplicó <upstream>con una ID de confirmación diferente.
Por ejemplo, esto sucederá si envía parches <upstream>por correo electrónico en lugar de enviar o retirar confirmaciones directamente.

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

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

VonC avatar Sep 14 '2009 04:09 VonC

Puedes ejecutar:

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

En el comentario de la última confirmación en el resultado, puede encontrar el nombre de la rama original.

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
Eugen Konkov avatar Oct 29 '2016 13:10 Eugen Konkov