1309 votos

¿Cómo se cambia el nombre de una etiqueta Git?

Hoy estaba buscando en los registros de un proyecto y me di cuenta de que hace un tiempo le puse un nombre a una etiqueta. ¿Hay alguna forma de renombrar la etiqueta? Google no ha encontrado nada útil.

Me di cuenta de que podría revisar la versión etiquetada y hacer una nueva etiqueta, incluso lo intenté. Pero eso parece crear un objeto etiquetado que no es del todo correcto. Por ejemplo,

git tag -l

la lista está fuera de orden en relación con todas las otras etiquetas. No tengo ni idea de si eso es significativo, pero me lleva a creer que el nuevo objeto de la etiqueta no es exactamente lo que quiero. Puedo vivir con eso, porque sólo me importa que el nombre de la etiqueta coincida con la documentación, pero prefiero hacerlo "bien", asumiendo que hay una forma correcta de hacerlo.

0 votos

¿Ha utilizado la misma invocación, es decir, si la antigua etiqueta estaba anotada/firmada, la nueva etiqueta también es de este tipo, o es una etiqueta ligera?

1 votos

Tanto la etiqueta antigua incorrecta, como la nueva etiqueta deseada, deberían estar anotadas y sin firmar. La etiqueta antigua se creó con 'git tag -a bad_tag_name', así que me gustaría hacer algo parecido a 'git tag -a good_tag_name'.

0 votos

Debo señalar que también quiero que este proceso mágico de renombramiento de etiquetas conserve la anotación de la etiqueta que se renombra. En realidad, me gustaría cambiar sólo el nombre y nada más.

2185voto

Casey Watson Puntos 9986

Así es como renombro una etiqueta old a new :

git tag new old
git tag -d old
git push origin :refs/tags/old
git push --tags

El colon en el comando de empuje quita la etiqueta del depósito remoto. Si no lo haces, git creará la vieja etiqueta en tu máquina cuando tires.

8 votos

Una cosa que hay que tener en cuenta es que si se utiliza git tag new old es que "viejo" entra en la etiqueta "nuevo" si "viejo" no es una etiqueta ligera. Para ver eso, pruebe: git tag -m tralala old; git tag new old; git tag -d old; git cat-file tag new | grep old . Eso es porque "new" apunta a la etiqueta "old", no a la commit a la que apunta "old".

1 votos

Para eliminar una etiqueta antigua del mando, también puedes hacer git push -d [remote] [tag] .

0 votos

confluence.atlassian.com/bitbucket/ también me fue útil.

302voto

Greg McGary Puntos 1876

La pregunta original era cómo renombrar una etiqueta, lo cual es fácil: primero crear NUEVO como un alias de VIEJO: tag NEW OLD y luego borrar el viejo: tag -d OLD .

La cita sobre "el camino de los imbéciles" y la (in)cordura está fuera de base porque habla de preservar el nombre de la etiqueta pero haciendo referencia a un estado de reposición diferente.

3 votos

La respuesta anterior es ligeramente preferible ya que incluye el git push origin negocio.

0 votos

La forma más fácil, funciona muy bien para renombrar una etiqueta de liberación anterior creada con Gitflow

7 votos

Advertencia : Utilizando git tag new old creará una etiqueta que apunte a la antigua etiqueta, no la etiqueta antigua commit. (Véase ¿Por qué no puedo hacer un checkout de mi etiqueta desde la GUI de Git? )

121voto

kaiser Puntos 4137

Además de las otras respuestas:

Primero tienes que construir un alias de la viejo nombre de la etiqueta:

git tag new_tag_name old_tag_name

Entonces tienes que borrar el viejo localmente :

git tag -d old_tag_name

Entonces borra la etiqueta de tu(s) ubicación(es) remota(s):

# Check your remote sources:
git remote -v
# The argument (3rd) is your remote location,
# the one you can see with `git remote`. In this example: `origin`
git push origin :refs/tags/old_tag_name

Finalmente necesitas añadir tu nueva etiqueta a la ubicación remota. Hasta que no lo hayas hecho, la(s) nueva(s) etiqueta(s) no se añadirá:

git push origin --tags

Itere esto para cada ubicación remota.

0 votos

Advertencia : Utilizando git tag new old creará una etiqueta que apunte a la antigua etiqueta, no la etiqueta antigua commit. (Véase ¿Por qué no puedo hacer un checkout de mi etiqueta desde la GUI de Git? )

1 votos

@StevenVascellaro Gracias por el enlace. Para la próxima vez, por favor, presenta un editar - La respuesta es también un esfuerzo comunitario. Gracias.

0 votos

No he hecho una edición porque todavía no he probado el código por mí mismo. (Tenga en cuenta la fecha de presentación en la pregunta vinculada)

26voto

Robert Munteanu Puntos 31558

Si se publica, no puedes borrarlo (sin arriesgarte a que te alquitranen y te emplumen, claro). El "camino de los imbéciles" es hacer:

Lo más sensato. Sólo admite que lo arruinaste y usa un nombre diferente. Otros ya han visto un nombre de etiqueta, y si mantienes el mismo nombre, puedes estar en la situación de que dos personas tienen "versión X", pero en realidad tienen "X" diferentes. Así que llámalo "X.1" y termina con esto.

Alternativamente,

La locura. Realmente quieres llamar a la nueva versión "X" también, aunque otros ya han visto la antigua. Así que usa git-tag -f de nuevo, como si no hubieras publicado la antigua.

Es una locura porque:

Git no cambia (y no debería) las etiquetas a espaldas de los usuarios. Así que si alguien ya tiene la vieja etiqueta, hacer un git-pull en tu árbol no debería hacerles sobrescribir la vieja.

Si alguien recibió una etiqueta de liberación de ti, no puedes cambiar la etiqueta por ellos actualizando la tuya. Este es un gran problema de seguridad, ya que la gente debe ser capaz de confiar en sus nombres de etiqueta. Si realmente quieres hacer una locura, tienes que confesar y decirle a la gente que la has cagado.

Todo por cortesía de la páginas de hombre

6 votos

O puede etiquetar (con el nombre correcto) esta etiqueta con nombre incorrecto.

7 votos

Gracias, ya he revisado esa página man un millón de veces. Afortunadamente la etiqueta mala no ha sido publicada en ningún sitio. Incluso si lo fuera, este es un proyecto interno y yo soy el único desarrollador (por el momento). Creo que estoy bastante a salvo tanto del alquitrán como de la pluma, pero sólo si puedo conseguir que el repo coincida con los documentos.

0 votos

A veces utilizo las etiquetas para mis propias referencias personales. Por ejemplo, podría ser una etiqueta 'ok_jb'. Lo uso porque algunas de las personas con las que trabajo no pueden construir para mi plataforma, por lo que a veces habrá errores de construcción. Entonces puedo obtener rápidamente una versión que se construye, mediante la comprobación de esa etiqueta. Cuando las nuevas fuentes se construyen, simplemente muevo la etiqueta, o la renombro como builds##, donde ## es un número (dependiendo del proyecto). También puedo enfatizar cuando se introduce una característica especial, añadiendo una etiqueta.

25voto

VonC Puntos 414372

Esta página wiki tiene esta interesante línea, que nos recuerda que podemos empujar varios árbitros :

git push origin <refs/tags/old-tag>:<refs/tags/new-tag> :<refs/tags/old-tag> && git tag -d <old-tag>

y pedir a otros clonadores que hagan git pull --prune --tags

Así que la idea es empujar:

  • <new-tag> por cada commits referenciado por <old-tag >: <refs/tags/old-tag>:<refs/tags/new-tag> ,
  • la eliminación de <old-tag> : :<refs/tags/old-tag>

Ver como ejemplo " ¿Cambiar la convención de nombres de las etiquetas dentro de un repositorio git? ".

0 votos

¿Conserva esto las anotaciones?

1 votos

Tenga en cuenta que este deja el nombre original de la etiqueta ¡¡en la anotación para las etiquetas anotadas!! Sin embargo, no estoy seguro de que esto implique algo, al menos en las versiones actuales.

0 votos

@gbr ¿Puedes editar la respuesta con un ejemplo que muestre ese "nombre de etiqueta original" que queda en la anotación?

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X