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