No es una pregunta que considere hacer por separado, pero me pregunto por qué git tag( -no alguna otra opción ...) no muestra los hashes de confirmación en primer lugar. Es agradable ver las soluciones que se le ocurren a la gente, pero considero que esto es un defecto de diseño en las opciones disponibles.
andreee
Respuestas:
142
Para obtener etiquetas git con el hash SHA1 del objeto Tag, puede ejecutar:
Tenga en cuenta que esto no diferenciará entre etiquetas ligeras y anotadas. Para las etiquetas ligeras, mostrará la confirmación y para las etiquetas anotadas, mostrará el hash del objeto de la etiqueta.
Lily Ballard
20
Para mostrar una lista de etiquetas con referencias desreferenciadas (en el caso de etiquetas anotadas) utilice git show-ref --tags -d. Las etiquetas desreferenciadas se adjuntan con un ^{}.
S. Christoffer Eliesen
49
El git tagcomando está subdesarrollado. Se desea mucho, pero falta en él, como detalles completos de la etiqueta y etiquetas en el orden del historial de confirmación.
En cambio, me gusta esto, que da exactamente lo que quiero pero no puedo obtener de git tag:
git log --oneline --decorate --tags --no-walk
Esto proporciona una vista codificada por colores muy agradable de las etiquetas en orden cronológico inverso (como estaría en el registro completo). De esa manera, no solo verá las etiquetas, también verá los hashes abreviados y los mensajes de confirmación de la etiqueta.
Lo he puesto como alias git ty de la git tagssiguiente manera:
Puede usar otros formatos de fecha en la --dateopción, así como controlar completamente la salida para que coincida con su gusto único en la --prettyopción. Ambas opciones están bien documentadas en la documentación de git-log .
Aunque no es lo que pidió el OP (mostrar hashes de confirmación sha1 ), es muy útil ya que los mensajes de confirmación también pueden ser útiles. +1 de mi parte.
Stelios Adamantidis
2
¡@nealmcb git loges poderoso! Puedes hacer que muestre exactamente lo que quieres. Prueba git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'. También son posibles otros formatos de fecha. Simplemente busque --dateen la página de ayuda. He actualizado mi respuesta para incluir esta opción.
ADTC
1
@SteliosAdamantidis En realidad, mi respuesta da los hashes SHA1 abreviados (primeros 7 caracteres), y si quieres hashes completos, siempre puedes modificarlos con --prettyy %H. Gracias por el +1 :)
ADTC
15
Las etiquetas anotadas tienen su propio SHA − 1, por lo que debemos eliminar la referencia. Sin embargo, las etiquetas ligeras no pueden desreferenciarse, ya que apuntan a una confirmación. Para resolverlo, debemos listar ambos y filtrar los objetos de confirmación:
El uso git log --tags --oneline --no-walktambién hará referencia a las etiquetas anotadas automáticamente. :)
ADTC
11
Para hacer referencia al SHA1 por cualquier tipo de referencia (rama, etiqueta ...) use git rev-parse:
git rev-parse tag1^0 tag2^0
Imprimirá solo los SHA1 completos, en líneas separadas. El ^0sufijo es una sintaxis especial, para asegurar que imprimirá el SHA1 de la confirmación apuntada por la etiqueta, ya sea que esté anotada o no. (Las etiquetas anotadas son objetos por derecho propio, que contienen un puntero a una confirmación junto con los metadatos. Si sabe que una etiqueta está anotada y desea el SHA1 de la etiqueta, simplemente deje fuera ^0).
Por supuesto, no debería necesitar hacer esto a menudo, ya que cualquier comando de Git que acepte un SHA1 también debería aceptar una etiqueta.
La mejor respuesta aquí, gracias @Jefromi. Tenga en cuenta que en un shell cmd de Windows, cualquier comando de git que use ^ debe estar entre comillas: por ejemplo, git rev-parse "tag1 ^ 0" "tag2 ^ 0".
yoyo
8
Tenía una pregunta similar, pero quería el hash de (varias) etiquetas específicas. Descubrí que "show-ref" tomará una lista de etiquetas, así que esto hace el trabajo:
Sin embargo, algunos experimentos con "git show" dieron como resultado este comando:
% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second
Como estoy mucho más familiarizado con el uso de "show" que con "show-ref", encuentro que este último es más fácil de recordar y también más útil.
Las etiquetas deben estar firmadas y / o enviadas por mensaje. Las etiquetas ligeras no tienen objetos SHA1 y son solo referencias. De lo contrario, intente git show.
Gran solucion Si desea tener Only tagenames en lugar del refname completo, puede cambiar el uso en %(refname:short)lugar de %(refname).
Radon8472
2
Tomé el comando de la publicación de anatoly techtonik, agregué el mensaje del título de las etiquetas / confirmaciones y lo formateé como bonitos cols.
El resultado es una salida idéntica git tag -npero con commit-hash como prefijo.
git tag
(-n
o alguna otra opción ...) no muestra los hashes de confirmación en primer lugar. Es agradable ver las soluciones que se le ocurren a la gente, pero considero que esto es un defecto de diseño en las opciones disponibles.Respuestas:
Para obtener etiquetas git con el hash SHA1 del objeto Tag, puede ejecutar:
La salida entonces se verá algo como:
Cada línea es el hash SHA1 de la etiqueta, seguido del nombre de la etiqueta con el prefijo
refs/tags/
.Si desea el hash SHA1 de la confirmación, en lugar del objeto de etiqueta, puede ejecutar:
Esto producirá una salida como:
Las líneas que terminan con
^{}
comienzan con el hash SHA1 del compromiso real al que apunta la etiqueta.fuente
git show-ref --tags -d
. Las etiquetas desreferenciadas se adjuntan con un^{}
.El
git tag
comando está subdesarrollado. Se desea mucho, pero falta en él, como detalles completos de la etiqueta y etiquetas en el orden del historial de confirmación.En cambio, me gusta esto, que da exactamente lo que quiero pero no puedo obtener de
git tag
:Esto proporciona una vista codificada por colores muy agradable de las etiquetas en orden cronológico inverso (como estaría en el registro completo). De esa manera, no solo verá las etiquetas, también verá los hashes abreviados y los mensajes de confirmación de la etiqueta.
Lo he puesto como alias
git t
y de lagit tags
siguiente manera:Nota: Tuve que usar la redirección bash porque
git t
Git no admite llamar a un alias desde otro alias (lo cual es un fastidio).Si desea ver la fecha y hora de confirmación, intente:
Puede usar otros formatos de fecha en la
--date
opción, así como controlar completamente la salida para que coincida con su gusto único en la--pretty
opción. Ambas opciones están bien documentadas en la documentación de git-log .fuente
git log
es poderoso! Puedes hacer que muestre exactamente lo que quieres. Pruebagit log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
. También son posibles otros formatos de fecha. Simplemente busque--date
en la página de ayuda. He actualizado mi respuesta para incluir esta opción.--pretty
y%H
. Gracias por el +1 :)Las etiquetas anotadas tienen su propio SHA − 1, por lo que debemos eliminar la referencia. Sin embargo, las etiquetas ligeras no pueden desreferenciarse, ya que apuntan a una confirmación. Para resolverlo, debemos listar ambos y filtrar los objetos de confirmación:
Resultado con etiquetas ligeras:
Resultado con etiquetas anotadas:
fuente
git log --tags --oneline --no-walk
también hará referencia a las etiquetas anotadas automáticamente. :)Para hacer referencia al SHA1 por cualquier tipo de referencia (rama, etiqueta ...) use
git rev-parse
:Imprimirá solo los SHA1 completos, en líneas separadas. El
^0
sufijo es una sintaxis especial, para asegurar que imprimirá el SHA1 de la confirmación apuntada por la etiqueta, ya sea que esté anotada o no. (Las etiquetas anotadas son objetos por derecho propio, que contienen un puntero a una confirmación junto con los metadatos. Si sabe que una etiqueta está anotada y desea el SHA1 de la etiqueta, simplemente deje fuera^0
).Por supuesto, no debería necesitar hacer esto a menudo, ya que cualquier comando de Git que acepte un SHA1 también debería aceptar una etiqueta.
fuente
Tenía una pregunta similar, pero quería el hash de (varias) etiquetas específicas. Descubrí que "show-ref" tomará una lista de etiquetas, así que esto hace el trabajo:
Sin embargo, algunos experimentos con "git show" dieron como resultado este comando:
Como estoy mucho más familiarizado con el uso de "show" que con "show-ref", encuentro que este último es más fácil de recordar y también más útil.
Vea también el buen resumen en ¿Cómo saber a qué confirmación apunta una etiqueta en Git? .
fuente
Las etiquetas deben estar firmadas y / o enviadas por mensaje. Las etiquetas ligeras no tienen objetos SHA1 y son solo referencias. De lo contrario, intente
git show
.fuente
Esto da una lista de todas las confirmaciones para etiquetas. Las etiquetas anotadas están desreferenciadas. Envíe gracias aquí .
fuente
%(refname:short)
lugar de%(refname)
.Tomé el comando de la publicación de anatoly techtonik, agregué el mensaje del título de las etiquetas / confirmaciones y lo formateé como bonitos cols.
El resultado es una salida idéntica
git tag -n
pero con commit-hash como prefijo.Si desea tener el hash largo en lugar del corto, debe reemplazarlo
objectname:short
porobjectname
.fuente