Hoy estaba buscando un proyecto a través de los registros y me di cuenta de que hacía mucho que buscaba un nombre de etiqueta. ¿Hay alguna forma de cambiar el nombre de la etiqueta? Google no ha encontrado nada útil.
Me di cuenta de que podía ver la versión etiquetada y hacer una nueva etiqueta, incluso lo intenté. Pero eso parece crear un objeto de etiqueta que no es del todo correcto. Para uno,
git tag -l
lo enumera fuera de servicio en relación con todas las otras etiquetas. No tengo idea de 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 haya una manera correcta de hacerlo.
git log --oneline --decorate --graph
es útil al limpiar etiquetas.Respuestas:
Así es como cambio el nombre de una etiqueta
old
anew
:Los dos puntos en el comando push eliminan la etiqueta del repositorio remoto. Si no hace esto, Git creará la etiqueta anterior en su máquina cuando tire.
Finalmente, asegúrese de que los otros usuarios eliminen la etiqueta eliminada. Dígales a ellos (compañeros de trabajo) que ejecuten el siguiente comando:
Tenga en cuenta que si está cambiando una etiqueta anotada , debe asegurarse de que el nuevo nombre de la etiqueta haga referencia a la confirmación subyacente y no al antiguo objeto de la etiqueta anotada que está a punto de eliminar. Por lo tanto, use en
git tag -a new old^{}
lugar degit tag new old
(esto se debe a que las etiquetas anotadas son objetos mientras que las etiquetas livianas no lo son, más información en esta respuesta ).fuente
git push origin :refs/tags/old
se puede simplificar agit push origin :old
mi parecer.git tag new old
creará una etiqueta que apunte a la etiqueta anterior, no a la confirmación de la etiqueta anterior. (Consulte ¿Por qué no puedo retirar mi etiqueta de Git GUI? )La pregunta original era cómo cambiar el nombre de una etiqueta, que es fácil: primero crear nuevas como un alias de VIEJO:
git tag NEW OLD
a continuación, eliminar VIEJO:git tag -d OLD
.La cita sobre "la forma Git" y la (in) cordura está fuera de lugar, porque se trata de preservar un nombre de etiqueta, pero hacer que se refiera a un estado de repositorio diferente.
fuente
git push origin
negocio.git tag new old
creará una etiqueta que apunte a la etiqueta anterior, no a la confirmación de la etiqueta anterior. (Consulte ¿Por qué no puedo retirar mi etiqueta de Git GUI? )Además de las otras respuestas:
Lo primero que necesita para construir un alias del antiguo nombre de la etiqueta, que apunta a la original cometer:
Luego debe eliminar el antiguo localmente :
Luego, elimine la etiqueta en su (s) ubicación (es) remota (s):
Finalmente, debe agregar su nueva etiqueta a la ubicación remota. Hasta que haya hecho esto, no se agregarán las nuevas etiquetas :
Itere esto para cada ubicación remota.
¡Tenga en cuenta las implicaciones que un cambio de etiqueta Git tiene para los consumidores de un paquete!
fuente
git tag new old
creará una etiqueta que apunte a la etiqueta anterior, no a la confirmación de la etiqueta anterior. (Consulte ¿Por qué no puedo retirar mi etiqueta de Git GUI? )git tag new old^{}
, entonces no necesitamosgit tag new_tag_name old_tag_name
(el primer paso).Si se publica, no puede eliminarlo (sin arriesgarse a ser asfaltado y con plumas). La 'forma Git' es hacer:
Alternativamente,
Es una locura porque:
Toda cortesía de las páginas del manual .
fuente
Esta página wiki tiene esta interesante frase, que nos recuerda que podemos empujar varias referencias :
Entonces la idea es impulsar:
<new-tag>
por cada commit que hace referencia<old-tag
>:<refs/tags/old-tag>:<refs/tags/new-tag>
,<old-tag>
::<refs/tags/old-tag>
Vea como ejemplo "¿ Cambiar la convención de nomenclatura de etiquetas dentro de un repositorio git? ".
fuente
git cat-file -p <tag>
; con su método en mi sistema obtengo la etiqueta 'renombrada' ref (<new-tag>
), pero su campo de etiqueta todavía está<old-tag>
.Como complemento de las otras respuestas, agregué un alias para hacerlo todo en un solo paso, con una sensación de comando de movimiento * nix más familiar. El argumento 1 es el nombre de la etiqueta anterior, el argumento 2 es el nombre de la etiqueta nueva.
Uso:
fuente
!sh
(pregunta fue respecto de Windows Git), sin embargo, después de actualizar el formato de la siguiente, funcionó:renametag = "!f() { git tag $2 $1; git tag -d $1; git push origin :refs/tags/$1; git push --tags; }; f"
.Siga el enfoque de 3 pasos para una o varias etiquetas.
Paso 1: Identifique el ID de compromiso / objeto del compromiso al que apunta la etiqueta actual
Paso 2: elimine la etiqueta del repositorio
Paso 3: cree una nueva etiqueta que apunte a la misma identificación de confirmación a la que apuntaba la etiqueta anterior
Una vez que el git local está listo con el cambio de nombre de la etiqueta, estos cambios se pueden volver al origen para que otros los tomen.
fuente
git push origin :refs/tags/v0.1.0-Demo
y para retrasar las etiquetas (con otras cosas pendientes)git push --tags
Para los aventureros se puede hacer en un solo comando:
fuente
git gc
recientementecp
), con el mensaje del mantenedor intacto.Independientemente de los problemas relacionados con las etiquetas de inserción y el cambio de nombre de las etiquetas que ya se han enviado, en caso de que la etiqueta para cambiar el nombre sea anotada , primero puede copiarla gracias a la siguiente línea de comando de una sola línea:
Luego, solo necesita eliminar la etiqueta anterior:
Encontré esta línea de comando gracias a las siguientes dos respuestas:
Editar:
Habiendo encontrado problemas al usar la configuración de sincronización automática de etiquetas
fetch.pruneTags=true
(como se describe en https://stackoverflow.com/a/49215190/7009806 ), personalmente sugiero que primero copie la nueva etiqueta en el servidor y luego elimine la anterior. De esa manera, la nueva etiqueta no se elimina aleatoriamente cuando se elimina la etiqueta anterior y una sincronización de las etiquetas le gustaría eliminar la nueva etiqueta que aún no está en el servidor . Entonces, por ejemplo, todos juntos obtenemos:fuente
También puede cambiar el nombre de las etiquetas remotas sin retirarlas, duplicando la etiqueta / rama anterior con un nuevo nombre y eliminando la anterior, en un solo
git push
comando.Cambiar nombre etiqueta remoto / rama remoto → conversión de la etiqueta: (Nota:
:refs/tags/
)Cambiar nombre rama remoto / tag remoto → conversión rama: (Nota:
:refs/heads/
)Salida renombrando una etiqueta remota:
fuente