2010-12-28 8 views
55

He visto los comandos git describe y git-name-rev pero no he conseguido que enumeren más de una etiqueta.Cómo enumerar todas las etiquetas que apuntan a una confirmación específica en git

Ejemplo: Tengo el 48eb354 sha1 y sé que el etiquetas A y el punto B a la misma. Así que quiero un comando git git {something} 48eb354 que produzca resultados similares a "A, B". No estoy interesado en saber referencias relativas a otras etiquetas o ramas solo coincidencias exactas para las etiquetas.

Respuesta

33

git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'

debería funcionar para ambas etiquetas ligeros y anotados.

+0

¡Gracias, esto funciona! – Zitrax

+0

Gracias. Exactamente lo que quiero – mrutyunjay

+0

Esto funciona bien para git <1.7.10. ¿Puedes explicar qué hace esa segunda parte de la expresión sed? '-e 's/\^{} //' ' – Dave

4
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ | 
    grep ^$commit_id | 
    cut -d' ' -f2

Lástima que no se puede hacer más fácilmente. Otra marca en git tag para incluir identificadores de compromiso podría expresar esa invocación git for-each-ref de forma natural.

+1

Gracias por la información, pero parece que no puedo ver las etiquetas con este comando. Usando el más simple "git for-each-ref | grep 48eb354" da 0 coincidencias. Por otro lado, gitk muestra muy bien las 2 etiquetas en frente de este compromiso. – Zitrax

+0

Parece que no funciona para etiquetas anotadas. –

1

El siguiente comando hace el trabajo, pero analizar directamente el contenido del directorio .git y por lo tanto puede romperse si el cambio de formato repositorio git.

grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,' 
+0

No los enumera tampoco, el único lugar donde veo el sha1 si grepping la carpeta completa .git está en gitk.cache y logs/refs/remotes/origin/master. ¿Cómo es que gitk puede enumerarlos? También noté que las etiquetas que estoy viendo son etiquetas anotadas, esta podría ser la razón por la cual las dos respuestas actuales no me funcionan. – Zitrax

125

git tag --points-at HEAD

Muestra todas las etiquetas HEAD, también puede dirigirse con cualquier sustituto Identificación SHA1.

+5

Disponible desde la versión 1.7.10: https://raw.github.com/gitster/git/master/Documentation/RelNotes/1.7.10.txt –

21

Se puede utilizar:

git tag --contains <commit> 

que muestra todas las etiquetas en cierta comprometerse. Se puede utilizar en lugar de:

git tag --points-at HEAD 

que está disponible sólo desde 1.7.10.

+5

NB: 'tag git --contains' no muestra solo las etiquetas que apuntan a la confirmación, sino que también incluye las posteriores etiquetas desde las cuales es alcanzable. – staafl

+0

Al menos en la versión 2.6.4, esto solo devuelve una sola etiqueta que apunta a la confirmación especificada. No los devuelve a todos. La respuesta anterior de @max parece funcionar correctamente para varias etiquetas. –

Cuestiones relacionadas