hacer - git-- tags
Git Tag list, display commit sha1 hash (7)
por lo que el comando git tag
enumera las etiquetas git actuales
tag1
tag2
git tag -n
imprime el mensaje de la etiqueta
tag1 blah blah
tag2 blah blah
¿Cuál es la mejor manera de obtener el hash de tag1 y tag2?
¿Qué tal esto?
git show-ref --tags
El comando git tag
está subdesarrollado. Se desea mucho, pero falta, como los detalles completos de las etiquetas y las etiquetas en el orden del historial de compromisos.
Me gusta esto en su lugar, que da exactamente lo que quiero pero no puedo obtener de la git tag
:
git log --oneline --decorate --tags --no-walk
Esto ofrece una muy buena vista codificada por colores de las etiquetas en el orden cronológico inverso (como lo sería en el registro completo). De esta forma, no solo verá las etiquetas, también verá los valores hash abreviados y los mensajes de confirmación de las confirmaciones de etiquetas.
Lo he aliaste a las git tags
git t
y git tags
siguiente manera:
git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"
Nota: Tuve que usar la redirección de bash para git t
ya que Git no admite llamar a un alias de otro alias (que es un fastidio).
Si desea ver la fecha y hora de confirmación, intente:
git log --tags --no-walk --date=iso-local --pretty=''%C(auto)%h %cd%d %s''
Puede usar otros formatos de fecha en la opción --date
, así como controlar completamente el resultado para que coincida con su gusto único en la opción --pretty
. Ambas opciones están bien documentadas en la documentación de git-log .
Las etiquetas anotadas tienen su propia SHA-1, por lo que debemos desreferenciarlas. Sin embargo, las etiquetas livianas no se pueden desreferenciar, ya que apuntan a una confirmación. Para resolver, debemos enumerar ambos y filtrar los objetos de confirmación:
git for-each-ref --sort -v:refname --format ''%(objectname) %(objecttype) %(refname)
%(*objectname) %(*objecttype) %(*refname)'' refs/tags | grep commit
Resultado con etiquetas livianas:
589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9
e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8
19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7
7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6
62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5
Resultado con etiquetas anotadas:
e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{}
1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{}
3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{}
1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{}
454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}
Las etiquetas deben estar firmadas y / o enviadas. Las etiquetas livianas no tienen objetos SHA1 y son solo referencias. De lo contrario, pruebe git show
.
Para obtener el SHA1 referido por cualquier tipo de ref (rama, etiqueta ...) use git rev-parse
:
git rev-parse tag1^0 tag2^0
Imprimirá solo los SHA1 completos, en líneas separadas. El sufijo ^0
es una sintaxis especial, para garantizar que esto 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 usted sabe que una etiqueta está anotada, y desea la etiqueta SHA1, simplemente deje el ^0
).
Por supuesto, no deberías necesitar hacer esto, ya que cualquier comando de Git que acepte un SHA1 también debería aceptar una etiqueta.
Tenía una pregunta similar, pero quería el hash de (varias) etiquetas específicas. Descubrí que "show-ref" tomará una lista de etiquetas, por lo que hace el trabajo:
% git show-ref v3.4.0.13-ga v3.4.0.13-base
bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base
79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga
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 "mostrar" que de "mostrar-ref", me resulta más fácil recordarlo y más útil también.
Ver también el buen resumen en ¿Cómo saber a qué compromiso apunta una etiqueta en Git? .
git for-each-ref --format=''%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)'' refs/tags
Esto proporciona una lista de todas las confirmaciones de etiquetas. Las etiquetas anotadas son desreferenciadas. Envía gracias here .