tag delete git git-tag

delete - Cambiar el nombre de las etiquetas git resulta en inconsistencia



git rename tag (4)

Me he encontrado con el mismo problema hace unos minutos. Ninguna de las respuestas ya presentadas se ocupó del problema real que se está deshaciendo del mensaje de warning: tag ''foo'' is really ''bar'' here y warning: tag ''foo'' is really ''bar'' here git describe el nombre nuevo de la etiqueta. Esto fue especialmente importante en mi caso, ya que mi sistema de compilación usa git describe para registrar en la compilación qué fuentes se usaron para hacer la compilación.

Replicando el problema

Puedo replicar el problema haciendo esto:

$ git tag foo --annotate -m"original message" $ git tag bar foo $ git tag -d foo $ git describe warning: tag ''foo'' is really ''bar'' here foo

(La --annotate anterior es redundante, ya que -m implica --annotate , pero la he incluido para enfatizar). Intenté replicar el problema con una etiqueta liviana, pero no pude hacerlo. Para replicar el problema, una anotación es necesaria.

Arreglando el Problema

Algo de esto implica empujar sobre cosas que ya han sido empujadas, pero me encuentro de acuerdo con David Culp cuando dice :

Sin embargo, hay ocasiones en que simplemente no vale la pena el dolor a largo plazo de una historia inexacta (desordenada) y el dolor a corto plazo vale la pena.

Una vez que te quedas con la warning: tag ''foo'' is really ''bar'' here , entonces debes hacer:

$ git tag bar bar -m"original message" --force $ git describe bar

Adaptar según sea necesario si el mensaje necesita cambiar.

Para eliminar la etiqueta antigua si ya estaba presionada:

$ git push origin :refs/tags/foo

Para actualizar la nueva etiqueta si ya fue empujada:

$ git push origin refs/tags/bar

Evitando el problema

Para evitar el problema, en primer lugar, tendrías que crear una bar con:

$ git tag bar foo -m"original message"

Después de cambiar el nombre de una etiqueta git "1.0" a "1.5" con

git tag 1.5 1.0 git tag -d 1.0 git push origin :refs/tags/1.0

mi repositorio git parece estar en un estado inconsistente. Aquí está el git describe salida:

warning: tag ''1.0'' is really ''1.5'' here 1.0-97-g88085b2

debería volver 1.5-... ahora

La salida de git fsck --tags :

Checking object directories: 100% (256/256), done. tagged commit aad9477bba4bcf44ea34ea9693aeffc98527ff01 (1.0) in b96ce67583239e198f9e2aff5175176d65779044 Checking objects: 100% (3975/3975), done.

¿Cómo puedo eliminar la referencia a la etiqueta eliminada? ¿Es esta la forma correcta de cambiar el nombre de las etiquetas?


No estoy seguro de cuán útil será esto, pero me topé con esta advertencia mientras utilizaba release-it . En mi repositorio remoto, había entradas de etiquetas ligeras y anotadas para el mismo nombre de etiqueta:

$ git ls-remote --tags origin 302883ef0cb2df8975abfbd24bbe89f64cf3da31 refs/tags/0.0.1 4852192308b404d74d7a4088c19a4629299f6ea2 refs/tags/0.0.1^{}

(Note el ^{} después del nombre de la etiqueta en la segunda entrada)

Esto parece ser normal para las etiquetas anotadas (?), Así que no piense que ese es el problema en sí mismo, pero el problema desapareció después de que eliminé todas las etiquetas y volví a etiquetar todo. Por ejemplo, para la etiqueta de arriba ...

git tag -d 0.0.1 # Delete local tag git push --delete origin 0.0.1 # Delete remote tag git tag -a -m "" 0.0.1 4852192308b404d74d7a4088c19a4629299f6ea2 # Recreate [annotated] tag git push --tags # Push tag(s) to remote repo


No, no creo que este sea el flujo de trabajo adecuado para las etiquetas en git.

Una regla fundamental de git es: no te metas con algo que ya hayas empujado.

Dado que ya ha presionado la etiqueta 1.0, no desea cambiarle el nombre a 1.5 localmente y luego tratar de presionarla. Deje la etiqueta 1.0 para la posteridad, cree una nueva etiqueta 1.5 y empújela también. Y realmente, para eso son las etiquetas. Por lo tanto, puede volver dentro de 6 meses y recrear cómo era su software en la versión 1.0.


Para reiterar la precaución estándar cuando alguien sugiera volver a escribir el historial (o, en este caso, volver a etiquetarlo), si puede evitarlo, no lo haga.

Sin embargo, hay ocasiones en que simplemente no vale la pena el dolor a largo plazo de una historia inexacta (desordenada) y el dolor a corto plazo vale la pena.

Si ese es el caso, el siguiente artículo da los pasos necesarios: Cómo cambiar el nombre de una etiqueta que ya se ha enviado a un git Repo remoto .

Los pasos básicos son:

git tag new_tag old_tag git push --tags git push origin :refs/tags/old_tag git tag -d old_tag