Tengo un montón de etiquetas sin anotar en el repositorio y quiero averiguar a qué compromiso apuntan. ¿Hay un comando que solo enumere las etiquetas y sus SHA de confirmación? Revisar la etiqueta y mirar la CABEZA me parece un poco laborioso.
Actualizar
Después de leer las respuestas, me di cuenta de que lo que realmente quería era simplemente mirar el historial que llevaba a la etiqueta, para lo cual git log <tagname>
es suficiente.
La respuesta que está marcada como respuesta es útil para obtener una lista de etiquetas y sus confirmaciones, que es lo que pregunté. Con un poco de piratería informática, estoy seguro de que es posible transformarlos en mensajes SHA + Commit.
git show-ref
muestra sha de la etiqueta, no sha de la revisión del repositorio. $ git show-ref test 08b9c774ab20e5bdb638339cf4ea2c124b0dae54 refs / tags / test $ git checkout test HEAD ahora está en c7f8831 ... $ git checkout 08b9c77 HEAD ahora está en c7f8831 ...--dereference
Respuestas:
Una forma de hacer esto sería con
git rev-list
. Lo siguiente generará la confirmación a la que apunta una etiqueta:Puede agregarlo como un alias
~/.gitconfig
si lo usa mucho:Y luego llámalo con:
fuente
git rev-parse <tag>
? Ogit rev-list -1 <tag>
?git rev-parse $TAG
devuelve el SHA1 del objeto de etiqueta, no el commit al que apunta.git rev-list -1
funciona, sin embargo.git rev-parse $TAG^{commit}
ogit rev-parse $TAG^{}
eliminar la referencia anotada / etiqueta firmadagit rev-list $TAG --max-count=1
git tag -a
ogit tag -s
, entoncesgit rev-parse <tag>
le daría SHA-1 de un objeto de etiqueta en sí mismo, mientrasgit rev-list -1 <tag>
le daría SHA-1 de commit (revisión) al que apunta, igual quegit rev-parse <tag>^{commit}
. HTH.Por ejemplo,
git show-ref --abbrev=7 --tags
le mostrará algo como lo siguiente:fuente
.git/packed-refs
o.git/refs/tags/*
git tag --verbose
mostrarlos también?-d
indicador para obtener el compromiso referenciado (en una segunda línea).git show-ref
comporta de manera diferente en los dos tipos diferentes de etiquetas no es obvio o de conocimiento común.Solo usa
git show <tag>
Sin embargo, también vuelca las diferencias de confirmación. Para omitir esas diferencias, use
git log -1 <tag>
. (¡Gracias a @DolphinDream y @demisx!)fuente
git show <tag>
muestra el diff, no el commit al que apunta la etiqueta.git show
arroja muchas más cosas en la pantalla que no necesitan estar allí. Oscurece el hash de confirmación real que uno está buscando. Un mejor comando esgit log -1 [tag-name]
ogit log -1 --pretty=oneline [tag-name]
si quieres oneliners.En mi repositorio,
git show-ref TAG
muestra el hash de la etiqueta, no el hash del commit al que apunta.git show-ref --dereference TAG
muestra, además, el commit al que se apunta.fuente
De Igor Zevaka :
Resumen
Como hay alrededor de 4 respuestas casi igualmente aceptables pero diferentes, resumiré todas las diferentes formas de pelar una etiqueta.
git rev-list -1 $TAG
( respuesta )git rev-list
genera los commits que conducen al$TAG
similargit log
pero solo muestran el SHA1 del commit. El-1
limita la salida a la confirmación tiene que apunta a.git show-ref --tags
( respuesta ) mostrará todas las etiquetas (locales y obtenidas de forma remota) y sus SHA1.git show-ref $TAG
( respuesta ) mostrará la etiqueta y su ruta junto con el SHA1.git rev-parse $TAG
( respuesta ) mostrará el SHA1 de una etiqueta sin anotar.git rev-parse --verify $TAG^{commit}
( respuesta ) mostrará un SHA1 de las etiquetas anotadas y no anotadas. En uso de Windowsgit rev-parse --verify %TAG%^^^^{commit}
(cuatro sombreros).cat .git/refs/tags/*
ocat .git/packed-refs
( respuesta ) dependiendo de si la etiqueta es local o no desde el remoto.fuente
Utilizar
(que devolvería SHA-1 de una confirmación incluso para la etiqueta anotada).
git show-ref <tag>
también funcionaría si<tag>
no se anota. Y siempre haygit for-each-ref
(ver documentación para más detalles).fuente
git rev-parse <tag>~0
que también parece funcionar y no requiere un escape especial en Windows (en el que se necesitan cuatro sombreros (^) en lugar de uno). El sufijo~<number>
da el <número> commit padre, por lo tanto,~0
produce el compromiso en sí. Por cierto,^0
también es una abreviatura válida para el^{commit}
sufijo de revisión.Qué tal esto:
O
fuente
Para obtener el sha / hash del commit al que se refiere una etiqueta (no el sha de la etiqueta):
git rev-list -1 <tag>
fuente
También me gustaría saber la forma "correcta", pero mientras tanto, puedes hacer esto:
fuente
git show --oneline mytag | head -1
Aunque esto es bastante antiguo, pensé en señalar una característica interesante que acabo de encontrar para enumerar etiquetas con commits:
Mostrará las ramas que terminan / comienzan en una confirmación, y las etiquetas para las confirmaciones.
fuente
También podría obtener una imagen más fácil de interpretar de dónde apuntan las etiquetas al uso
y luego desplácese hasta la etiqueta que está buscando a través de
/
.Una vista más compacta (
--pretty=oneline
) más todas las cabezas (-a
) también podría ayudar:Parece un poco aterrador, pero también podría ser alias
~/.gitconfig
si es necesario.fuente
Respuesta corta post-Git-2
Sé que esta pregunta ha estado aquí por bastante tiempo. Y la respuesta de CB Bailey es 100% correcta:
git show-ref --tags --abbrev
Este me gusta más porque usa
git tag
:Simple. Corto.
PS alias como
git taglist
con este comando:fuente
Desde la lista de correo de git , esta es la forma de obtener la lista de hashes de confirmación para etiquetas con desreferencia automática para etiquetas anotadas:
fuente
Esto no muestra los nombres de archivo, pero al menos tiene una idea del repositorio.
Cada archivo en ese directorio contiene una confirmación SHA que apunta a una confirmación.
fuente
.git/packed-refs
funcionó sin embargo.También me gustaría saber la forma correcta , pero siempre puedes echar un vistazo a:
o:
fuente
git rev-list
.Esto te dará el hash SHA1 actual
Hash de confirmación abreviado
Commit Hash
fuente
git log <tag> -n 1 --pretty=%H
síSi desea ver los detalles de la etiqueta SOMETAG (etiquetador, fecha, etc.), el hash del compromiso al que apunta y un poco de información sobre el compromiso, pero sin la diferencia completa, intente
Salida de ejemplo:
fuente
Así que tengo una gran cantidad de carpetas de lanzamiento, donde esas carpetas pueden extraerse de uno de los pocos repositorios diferentes, y pueden ser dev, qa o ramas maestras o pueden ser lanzamientos de producción, retirados de una etiqueta, y la etiqueta puede ser anotado o no. Tengo un script que buscará en la carpeta de destino y recibirá una respuesta en el formulario -. El problema es que las diferentes versiones de git devuelven un estado diferente 'para el pago de una etiqueta.
Entonces encontré que
git show-ref --tags
funcionó inicialmente, excepto por las etiquetas anotadas. Sin embargo, agregar -d agregó una entrada separada a la lista de etiquetas, una para la etiqueta y la otra para la anotación (la confirmación de anotación se identificó como ^ {} que eliminé con sed).Este es el núcleo de mi script, para cualquiera que lo quiera:
fuente
Se puede usar a continuación, le dará el hash de confirmación
git show -s --format=%H <tag>^{commit}
Si se requiere un hash abreviado de commit,
git show -s --format=%h <tag>^{commit}
fuente