git - tag - ¿Se puede convertir una etiqueta liviana en una etiqueta anotada?
que es git log (4)
Convierta todas las etiquetas en anotadas (según el ejemplo de Charles Bailey y el comentario de Ferenc Wágner):
for tag in $(git tag -l); do git tag -a -f $tag $tag^0 -m $tag; done
git push --tags --force
Etiqueté una confirmación con una etiqueta ligera y la inserté en un repositorio remoto, compartido con otros desarrolladores. Ahora me he dado cuenta de que debería haberlo anotado para que aparezca en git describe
.
¿Hay alguna forma de convertirlo / volver a etiquetar el compromiso sin romper las cosas?
Según la respuesta de Charles y en esta publicación de blog , creo que es mejor usar algo como esto:
#!/bin/sh
tag=$1
date="$(git show $tag --format=%aD | head -1)"
GIT_COMMITTER_DATE="$date" git tag -a -f $tag $tag
También puede usar git describe --tags
para incluir también etiquetas ligeras en la búsqueda.
Una etiqueta liviana es solo una ''ref'' que apunta a ese compromiso. Puede forzar a crear una nueva etiqueta anotada sobre la etiqueta anterior:
git tag -a -f <tagname> <tagname>
A partir de Git v1.8.2, necesitas usar --force
para reemplazar cualquier etiqueta en un control remoto con git push
, incluso si estás reemplazando una etiqueta liviana con algo que sea efectivamente un avance rápido o un objeto de etiqueta verdadero apuntando al misma confirmación que la referencia de etiqueta existente.
git push --force origin <tagname>