Pregunta ¿Cómo cambias el nombre de una etiqueta de Git?


Hoy estaba revisando los registros para un proyecto y me di cuenta de que hacía mucho tiempo que usaba un nombre de etiqueta. ¿Hay alguna manera de cambiar el nombre de la etiqueta? Google no ha encontrado nada útil.

Me di cuenta de que podía revisar la versión etiquetada y hacer una nueva etiqueta, incluso lo intenté. Pero eso parece crear un objeto de etiqueta que no está del todo bien. Para uno,

git tag -l

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


966
2018-06-22 18:09


origen


Respuestas:


Así es como cambio el nombre de una etiqueta old a new:

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

Los dos puntos en el comando de inserción eliminan la etiqueta del repositorio remoto. Si no lo hace, Git creará la etiqueta antigua en su máquina cuando tire.

Finalmente, asegúrese de que los otros usuarios eliminen la etiqueta eliminada. Dígales (compañeros de trabajo) que ejecuten el siguiente comando:

git pull --prune --tags

1640
2018-04-19 16:51



La pregunta original era cómo cambiar el nombre de una etiqueta, lo que es fácil: primero crea NUEVO como un alias de VIEJO: git tag NEW OLD luego borra OLD: git tag -d OLD.

La cita sobre "la forma de Git" y (in) la cordura está fuera de base, porque se trata de preservar un nombre de etiqueta, pero haciendo que se refiera a un estado de repositorio diferente.


270
2017-12-09 13:34



Además de las otras respuestas:

Primero necesitas construir un alias del antiguo nombre de la etiqueta, que apunta a la confirmación original:

git tag new old^{}

Entonces necesitas borrar el anterior en la zona:

git tag -d old

A continuación, elimine la etiqueta en su (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

Finalmente, debe agregar su nueva etiqueta a la ubicación remota. Hasta que haya hecho esto, la nueva etiqueta (s) no lo hará ser agregado:

git push origin --tags

Itere esto para cada ubicación remota.

Tenga en cuenta, de la implicaciones que un cambio de etiqueta Git tiene a los consumidores de un paquete!


100
2018-04-27 11:42



Si está publicado, no puede eliminarlo (sin arriesgarse a ser alquitranado y emplumado, eso es). El 'modo Git' es hacer:

Lo cuerdo. Solo admite que te equivocaste 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 la "versión X", pero en realidad tienen diferentes "X". Así que simplemente llámalo "X.1" y listo.

Alternativamente,

Lo loco. También desea llamar a la nueva versión "X", aunque otros ya hayan visto la anterior. Entonces use git-tag -f otra vez, como si no hubiera publicado el anterior.

Es tan loco porque:

Git no (y no debería) cambiar las etiquetas detrás de los usuarios. Entonces, si alguien ya recibió la etiqueta anterior, hacer git-pull en su árbol no debería hacer que sobrescriba la antigua.

Si alguien recibió una etiqueta de liberación de usted, no puede simplemente cambiar la etiqueta por ellos actualizando la suya propia. Este es un gran problema de seguridad, ya que las personas DEBEN poder confiar en sus nombres de etiqueta. Si realmente quieres hacer locura, debes confesarlo y decirle a la gente que te equivocaste.

Todo cortesía de la páginas man.


25
2018-06-22 18:10



Esta página wiki tiene este interesante delineador, que nos recuerda que podemos empujar varios refs:

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

y pida a otros cloners que lo hagan git pull --prune --tags

Entonces la idea es presionar:

  • <new-tag> para cada commit referido por <old-tag>: <refs/tags/old-tag>:<refs/tags/new-tag>,
  • la eliminación de <old-tag>: :<refs/tags/old-tag>

Vea como un ejemplo "Cambiar la convención de nomenclatura de las etiquetas dentro de un repositorio git?".


22
2018-06-16 14:20



Como complemento de las otras respuestas, agregué un alias para hacerlo todo en un solo paso, con un sentido de comando * nix move más familiar. El argumento 1 es el nombre de la etiqueta anterior, el argumento 2 es el nuevo nombre de la etiqueta.

[alias]
    renameTag = "!sh -c 'set -e;git tag $2 $1; git tag -d $1;git push origin :refs/tags/$1;git push --tags' -"

Uso:

git renametag old new

19
2017-11-17 15:00



Para los aventureros se puede hacer en un solo comando:

mv .git/refs/tags/OLD .git/refs/tags/NEW

6
2017-07-13 09:24



La parte fácil es cambiar el nombre de las etiquetas locales. La parte más difícil es los remotos. La idea detrás de este truco es duplicar la antigua etiqueta / rama a una nueva y eliminar la anterior, sin pago.

Renombre de etiqueta remota / Sucursal remota → conversión de etiqueta: (Darse cuenta: :refs/tags/)

git push <remote_name> <old_branch_or_tag>:refs/tags/<new_tag> :<old_branch_or_tag>

Redenominación remota de rama / etiqueta remota → conversión de rama: (Darse cuenta: :refs/heads/)

git push <remote_name> <old_branch_or_tag>:refs/heads/<new_branch> :<old_branch_or_tag>

Salida renombrando una etiqueta remota:

D:\git.repo>git push gitlab App%2012.1%20v12.1.0.23:refs/tags/App_12.1_v12.1.0.23 :App%2012.1%20v12.1.0.23

Total 0 (delta 0), reused 0 (delta 0)
To https://gitlab.server/project/repository.git
 - [deleted]               App%2012.1%20v12.1.0.23
 * [new tag]               App%2012.1%20v12.1.0.23 -> App_12.1_v12.1.0.23

1
2018-02-17 13:41