¿Cómo enumerar ramas que contienen un compromiso determinado?
¿Cómo puedo consultar git para saber qué ramas contienen una confirmación determinada? gitk
normalmente 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.
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
--contains
etiqueta 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 -a
opció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 usarlogit cherry
para 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>
).
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