Git: ¿Cómo saber en qué rama está una etiqueta?


84

Actualmente estoy ocupado con un proyecto con muchas ramas y tengo una etiqueta para los últimos cambios que se realizaron en una de las ramas. Pero no tengo claro en qué rama se encuentra esta etiqueta.

¿Cómo saber en qué rama se encuentra una etiqueta?

Respuestas:


118

Incluso más corto:

git branch --contains tags/<tag>

(funciona para cualquier referencia de árbol)


Si puede encontrar a qué confirmación se refiere una etiqueta :

 git rev-parse --verify tags/<tag>^{commit}
 # or, shorter:
 git rev-parse tags/<tag>~0

Luego puede encontrar qué rama contiene esa confirmación .

git branch --contains <commit>

Como se ha comentado más adelante por user3356885 , para las ramas inverosímiles (sucursales en los mandos a distancia de espacio de nombres)

git branch -a --contains tags/<tag>
git branch -a --contains <commit>

6
En mi versión de Git, 1.7.1, simplemente puedo hacerlo git branch --contains <tag>.
Dan Moulding

@DanMoulding es cierto, he editado la respuesta para reflejar eso. Inicialmente estaba interesado en encontrar la confirmación adjunta a una etiqueta.
VonC

6
Buscar una etiqueta que se creó en una rama remota no producirá ningún resultado en este caso. En otras palabras, no se producirán resultados para las sucursales que no existen localmente. La opción -a debería usarse para eso. git branch -a --contains <tag>. Lo mismo funcionará para las confirmaciones.
user3356885

1
Desafortunadamente, esto devuelve varias cosas: * (HEAD separado en 82dd3f0) master refs / tags / 0.0.1-test-masterBr -> Quiero acceder programáticamente a la rama, sin información HEAD o la etiqueta en sí
herm

@herm En ese caso, intentegit branch --no-merge tags/<a-tag>
VonC

30

Si "git branch --contains" no hace nada, asegúrese de incluir todas las ramas, tanto las remotas como las locales:

git branch -a --contains <tag>

Desde la ayuda de git:

Acciones específicas de git-branch: -a, --todos enumeran tanto el seguimiento remoto como las ramas locales


5
git branch --contains tag

no hace nada por mí, pero encontré mi solución a este problema en git gui .

Empiece así:

git gui

(En mi Ubuntu tuve que instalarlo primero sudo apt-get install git-gui).

Luego seleccioné el elemento de menú Repositorio -> Visualizar todo el historial de sucursales . En la ventana resultante, seleccioné el elemento de menú Archivo -> Lista de referencias .

Apareció otra ventana, con una lista de todas mis etiquetas (y otras referencias). Se puede hacer clic en estos y, después de hacer clic en uno de ellos, solo tenía que verificar el marco inferior izquierdo para ver la lista de ramas. Me gusta esto:

Parent: somesha (message)
Parent: someothersha (another message)
Child:  anothersha (yet another message)
Branches: branch1, master, remotes/origin/branch2, remotes/upstream/branch1, etc
Follows: v1.1.2
Precedes: v1.1.4

3

En lo que respecta al comentario de @ VonC sobre cómo encontrar la confirmación a la que hace referencia una etiqueta, solo use:

git show <tag>

Dado que una etiqueta está vinculada a una confirmación específica, se puede usar para mostrar esa confirmación, lo que le dará los detalles completos de la confirmación.



0

Una etiqueta siempre se refiere al número de confirmación. Usando ese número de etiqueta, puede encontrar la rama desde la que se colocó la etiqueta usando esto:

git for-each-ref | grep ${commit_num} | grep origin | sed "s/.*\///"

0

También puede probar esto, tenía un caso de uso similar y esto funcionó para mí

git ls-remote --heads origin | grep $CI_COMMIT_SHORT_SHA  | sed "s/.*\///"

Ligeramente diferente pero inspirándose en la respuesta de @ ttfreeman


-1

git reflog --date = local | grep feature_xxx


3
Dudo que esto ayude, o incluso que funcione en absoluto. Para convencerme de lo contrario, agregue una explicación de cómo funciona esto y por qué se supone que debe ayudar.
Yunnosch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.