marcadorison
¿Cómo puedo eliminar una etiqueta de Git que ya se envió?
adam franco
Puede enviar una referencia ‘vacía’ al nombre de la etiqueta remota:
git push origin :tagname
O, más expresivamente, utilice el --delete
opción (o -d
si su versión de git es anterior a 1.8.0):
git push --delete origin tagname
Tenga en cuenta que git tiene un espacio de nombre de etiqueta y un espacio de nombre de rama, por lo que puede usar el mismo nombre para una rama y para una etiqueta. Si desea asegurarse de que no puede eliminar accidentalmente la rama en lugar de la etiqueta, puede especificar la referencia completa que nunca eliminará una rama:
git push origin :refs/tags/tagname
Si también necesita eliminar la etiqueta local, utilice:
git tag --delete tagname
Fondo
Empujar una rama, etiqueta u otra referencia a un repositorio remoto implica especificar “¿qué repositorio, qué fuente, qué destino?”
git push remote-repo source-ref:destination-ref
Un ejemplo del mundo real en el que empuja su rama maestra a la rama maestra del origen es:
git push origin refs/heads/master:refs/heads/master
Que debido a las rutas predeterminadas, se puede acortar a:
git push origin master:master
Las etiquetas funcionan de la misma manera:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
Que también se puede acortar a:
git push origin release-1.0:release-1.0
Al omitir la referencia de origen (la parte antes de los dos puntos), empuja ‘nada’ al destino, eliminando la referencia en el extremo remoto.
-
+1 por responder la pregunta y explicar el caso general, y detallar el significado de la sintaxis completa
– Pedro Anfitrión
14/09/2012 a las 19:03
-
Y en caso de que alguien se pregunte cómo eliminar varias etiquetas a la vez, simplemente enumérelas usando un espacio en blanco, por ejemplo
git push --delete origin tag1 tag2
. Lo mismo es válido para la eliminación de etiquetas localesgit tag -d tag1 tag2
– Dmitri
28 de mayo de 2014 a las 0:54
-
Si el nombre de la etiqueta coincide con el nombre de una sucursal, es posible que termine eliminando su sucursal. Ja ja. Ver la segunda respuesta – es más ecológico
– zuba
26 de diciembre de 2016 a las 9:56
-
También es interesante saber que
git tag -d `git tag`
eliminará todas las etiquetas locales. Lo mismo se aplica paragit push --delete origin `git tag`
asumiendo que sacó las etiquetas remotas localmente. Eso fue útil en un entorno de prueba.– DarkFranX
31 de julio de 2018 a las 15:15
-
El hecho de que tengamos más de 6700 votos a favor y que sea tan complicado probablemente signifique que podría rediseñarse.
– LMS5400
31 de agosto de 2021 a las 21:31
quexer
Una forma más directa es
git push --delete origin YOUR_TAG_NAME
La sintaxis de dos puntos de prefijo de la OMI es un poco extraña en esta situación
-
Creo que esta es la forma correcta… otras sintaxis me parecen más trucos.
– Luigi R. Viggiano
24 de diciembre de 2012 a las 17:45
-
Esto funciona. Una adición: si tiene una sucursal y una etiqueta con el mismo nombre, puede poner la palabra
tag
antes del nombre de su etiqueta para asegurarse de obtener la etiqueta, no la rama.– andypaxo
27 de marzo de 2013 a las 20:08
-
@andypaxo Lo que toma el comando es refspecs, la forma correcta sería prefijar las etiquetas con
refs/tags/
como esto:refs/tags/v2.3.1
.– p3lim
13 de marzo de 2015 a las 5:04
-
Tenía un nombre de etiqueta ‘malo’ creado en el servidor remoto de alguna manera, que tenía caracteres especiales, por lo que no puedo sincronizar con eso, así que simplemente eliminé eso con su sugerencia: git push –delete origin “service–
— 151″, no se puede eliminar ni con intellij, ni con stash, ni con sourceTree. Gracias ! – Dmitri Algazín12 de abril de 2019 a las 14:54 -
Para aquellos que leyeron esto mucho después de que se publicó la respuesta, en ese momento, la respuesta (ahora aceptada) no tenía este contenido; más tarde, el contenido de esta respuesta fue (muy estrictamente) sugerido editado en el aceptado. Este es uno de esos extraños casos extremos en los que “la mejor respuesta sube al sistema superior” de Stack Overflow falla un poco, por un lado, estoy feliz de que la respuesta aceptada tenga la información correcta porque la mayoría de los lectores no mirarán más allá de la respuesta superior, pero no estoy entusiasmado con la forma en que llegamos aquí… Espero que los futuros lectores no piensen que esta respuesta es solo copiar/pegar.– jrh5 de marzo de 2020 a las 16:17
alex decano
Si tiene una etiqueta remota v0.1.0
para borrar, y su control remoto está origin
entonces simplemente:
git push origin :refs/tags/v0.1.0
Si también necesita eliminar la etiqueta localmente:
git tag -d v0.1.0
Ver adam francoLa respuesta de Git para una explicación del inusual :
sintaxis para la eliminación.
-
esto también funciona con jgit. la abreviatura :tag no funciona con jgit
– rynop
27/09/2012 a las 19:50
-
Obtuve
fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
…?– Chaim Eliyah
13 de septiembre de 2016 a las 23:17
-
@ChaimEliyah tienes una barra inclinada, tal vez ese sea tu problema
– Joffrey
31/10/2016 a las 22:21
-
Mejor respuesta, ya que esto también funciona si tiene una rama y una etiqueta que se llama igual.
– Erik A. Brandstadmoen
5 de febrero de 2018 a las 8:25
-
Sólo
:tagname
debería funcionar para la eliminación remota.– Asclepio
5 de febrero de 2019 a las 21:32
Siddhartha Mukherjee
Elimine todas las etiquetas locales y obtenga la lista de etiquetas remotas:
git tag -l | xargs git tag -d
git fetch
Eliminar todas las etiquetas remotas
git tag -l | xargs -n 1 git push --delete origin
Limpiar etiquetas locales
git tag -l | xargs git tag -d
mahmud zalt
Desde tu terminal, haz esto:
git fetch
git tag
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
Ahora ve a Github.com y actualiza, desaparecen.
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
La primera línea elimina your_tag_name
de local repo y eliminaciones de segunda línea your_tag_name
de remoto repositorio
Para aquellos que usan GitHub, se necesita un paso más: descartando borrador.
git push --delete origin $TAGNAME
es el enfoque correcto (además de una eliminación local).
Pero: asegúrese de usar Git 2.31+ (Q1 2021).
“git push $there --delete
“(hombre) debería haberse diagnosticado como un error, pero en su lugar se convirtió en una inserción coincidente, que se ha corregido con Git 2.31 (Q1 2021).
Ver cometer 20e4164 (23 feb 2021) por Junio C Hamano (gitster
).
(Combinado por Junio C Hamano — gitster
— en cometer 140045825 de febrero de 2021)
push
: no des la vuelta--delete ''
en un empujón coincidenteNotado por: Tilman Vogel
Cuando añadimos un azúcar de sintaxis “
git push remote --delete
“(hombre)<ref>
a “git push
“(hombre) como sinónimo de canónicogit push remote
(hombre) : sintaxis en f517f1f (“builtin-push
:add
(hombre)--delete
como azúcar sintáctico para :foo”, 2009-12-30, Git v1.7.0-rc0 — unir), no fuimos lo suficientemente cuidadosos para asegurarnos de que<ref>
no está vacío.Reescribiendo a ciegas”
--delete <ref>
” a “:<ref>
” significa que una cadena vacía<ref>
da como resultado refspec “:
“, que es la sintaxis para solicitar un empuje de “coincidencia” que no elimine nada.Peor aún, si hubiera referencias coincidentes que se pueden avanzar rápidamente, se habrían publicado prematuramente, incluso si el usuario siente que aún no están listas para ser expulsadas, lo que sería un verdadero desastre.
-
¡funciona! Maldita sea, ¿por qué no ponen esta opción en github en los lanzamientos? Estaba haciendo una actualización de la misma etiqueta con cremalleras mayores. Me tomó un tiempo darme cuenta de que la fecha no estaba bien. y luego hice varios intentos, hasta que vi esta página.
– Inconsciencia UneSource
13 oct a las 12:28