¿Cómo se elimina una etiqueta Git que ya se ha enviado?
Solo necesita insertar una referencia 'vacía' al nombre de la etiqueta remota:
git push origin :tagname
O, más expresivamente, use la --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 espacio de nombre de etiqueta y 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, use:
git tag --delete tagname
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 anterior a los dos puntos), empuja 'nada' al destino, eliminando la referencia en el extremo remoto.
git push --delete origin tag1 tag2
. Lo mismo es válido para la eliminación de etiquetas localesgit tag -d tag1 tag2
tag
se adjunta a una sola confirmación solamente. Por eso el nombre de la sucursal es irrelevante.git tag -d `git tag`
eliminará todas las etiquetas locales. Lo mismo aplica paragit push --delete origin `git tag`
suponer que sacó las etiquetas remotas localmente. Eso fue útil en un entorno de prueba.Una forma más directa es
La sintaxis de colon con prefijo de la OMI es un poco extraña en esta situación
fuente
git push --delete origin "TAGNAME"
donde TAGNAME es el nombre de la etiqueta original.tag
antes del nombre de su etiqueta para asegurarse de obtener la etiqueta, no la rama.refs/tags/
, como esto:refs/tags/v2.3.1
.Si tiene
v0.1.0
que eliminar una etiqueta remota y su control remoto esorigin
, simplemente:Si también necesita eliminar la etiqueta localmente:
Vea la respuesta de Adam Franco para una explicación de la
:
sintaxis inusual de Git para su eliminación.fuente
fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
...?:tagname
debería funcionar para la eliminación remota.Elimine todas las etiquetas locales y obtenga la lista de etiquetas remotas :
Eliminar todas las etiquetas remotas
Limpiar etiquetas locales
fuente
Para eliminar la etiqueta del repositorio remoto:
También es posible que desee eliminar la etiqueta localmente:
fuente
git push --delete origin TAGNAME && git tag -d TAGNAME
Desde su terminal, haga esto:
Ahora ve a Github.com y actualiza, desaparecen.
fuente
your_tag_name
del repositorio local .your_tag_name
del repositorio remoto .fuente
Eliminar la etiqueta local '12345'
Eliminar la etiqueta remota '12345' (por ejemplo, la versión de GitHub también)
Enfoque alternativo
fuente
Solo tenga en cuenta que, si tiene una rama remota nombrada como etiqueta remota, estos comandos son ambiguos:
Por lo tanto, debe usar este comando para eliminar la etiqueta:
y este para borrar la rama:
Si no, obtendrías un error como este:
fuente
Método hasta 100 veces más rápido para miles de etiquetas remotas
Después de leer estas respuestas mientras necesitaba eliminar más de 11,000 etiquetas, aprendí que estos métodos dependen o
xargs
toman demasiado tiempo, a menos que tenga horas para grabar.Luchando, encontré dos formas mucho más rápidas. Para ambos, comience con
git tag
ogit ls-remote --tags
para hacer una lista de etiquetas que desea eliminar en el control remoto. En los ejemplos a continuación, puede omitir o reemplazarsorting_proccessing_etc
con cualquiergrep
ing,sort
ing,tail
ing ohead
ing que desee ( por ejemplo,grep -P "my_regex" | sort | head -n -200
etc. ):Este primer método es, con mucho, el más rápido, quizás de 20 a 100 veces más rápido que el uso
xargs
, y funciona con al menos varios miles de etiquetas a la vez.¿Como funciona esto? La lista normal de etiquetas separadas por líneas se convierte en una sola línea de etiquetas separadas por espacios, cada una de las cuales se antepone
:
. . .El uso
git push
con esta etiqueta de formato no empuja nada en cada referencia remota, borrándola (el formato normal para presionar de esta manera eslocal_ref_path:remote_ref_path
).El método dos se desglosa como una respuesta separada en otra parte de esta misma página
Después de ambos métodos, es probable que también desee eliminar sus etiquetas locales. Esto es mucho más rápido, por lo que podemos volver a usar
xargs
ygit tag -d
, que es suficiente.O similar a la eliminación remota:
fuente
Si usa SourceTree, una gran interfaz gráfica de usuario de Git, puede hacerlo fácilmente sin la línea de comandos haciendo lo siguiente:
YOUR_TAG_NAME ahora se eliminará de su repositorio local y de todos los controles remotos, ya sea GitHub, BitBucket o en cualquier otro lugar que haya incluido como control remoto para ese repositorio.
Además, si eliminó una etiqueta localmente pero no en los orígenes remotos, y desea eliminarla en todas partes, simplemente cree una nueva etiqueta que tenga el mismo nombre y se adjunte al mismo compromiso que los orígenes. Luego, repita los pasos anteriores para eliminar en todas partes.
fuente
Si ha creado una etiqueta llamada
release01
en un repositorio Git, la eliminará de su repositorio haciendo lo siguiente:Para eliminar uno de un repositorio Mercurial:
Consulte https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
fuente
Si está utilizando PowerShell y desea eliminar algunos de ellos:
Por supuesto, también puede filtrarlos antes de eliminar:
fuente
Como @CubanX sugirió, he dividido esta respuesta de mi original:
Aquí hay un método que es varias veces más rápido
xargs
y puede escalar mucho más con ajustes. Utiliza la API de Github , un token de acceso personal, y aprovecha la utilidadparallel
.parallel
tiene muchos modos de funcionamiento, pero generalmente paraleliza cualquier comando que le dé mientras le permite establecer límites en la cantidad de procesos. Puede alterar el--jobs 2
parámetro para permitir una operación más rápida, pero tuve problemas con los límites de velocidad de Github , que actualmente son 5000 / h, pero también parece tener un límite a corto plazo no documentado.Después de esto, probablemente también quieras eliminar tus etiquetas locales. Esto es mucho más rápido, por lo que podemos volver a usar
xargs
ygit tag -d
, que es suficiente.fuente
Las otras respuestas señalan cómo lograr esto, pero debe tener en cuenta las consecuencias ya que este es un repositorio remoto.
La página de manual de git tag, en la sección On Retagging , tiene una buena explicación de cómo informar cortésmente a los otros usuarios del repositorio remoto del cambio. Incluso dan una plantilla de anuncio útil para comunicar cómo otros deberían obtener sus cambios.
fuente
Quería eliminar todas las etiquetas, excepto las que coinciden con un patrón para poder eliminar todas las etiquetas de producción, excepto los últimos dos meses, esto es lo que usé con gran éxito:
Eliminar todas las etiquetas remotas y excluir la expresión de Eliminar
Eliminar todas las etiquetas locales y excluir la expresión de Eliminar
fuente
Script simple para eliminar la etiqueta dada de las ubicaciones locales y de origen. Con un cheque si la etiqueta realmente existe.
Cómo utilizar:
fuente
Parece mucho trabajo para algo que
xargs
ya hace. Mirando hacia atrás a través de este hilo, supongo que la lentitud con laxargs
que experimentaste se debe a que la respuesta original se usabaxargs -n 1
cuando realmente no era necesario.Esto es equivalente a su método uno, excepto que
xargs
trata automáticamente con la longitud máxima de la línea de comando:xargs
También puede ejecutar procesos en paralelo. Método 2 conxargs
:Lo anterior utiliza un máximo de 5 procesos para manejar un máximo de 100 argumentos en cada proceso. Puede experimentar con los argumentos para encontrar lo que funciona mejor para sus necesidades.
fuente
Si tiene una etiqueta creada comenzando con el carácter # , por ejemplo
#ST002
, es posible que no pueda eliminar usando patrones normales. es decirNo eliminará la etiqueta, pero la envolverá en un String Literal así
Eso lo eliminará. Esperando que ayude a alguien que cometió el error de usar # para escribir nombres de etiquetas.
fuente
Aquí hay un caso de prueba local para probarlo localmente sin jugar con un control remoto:
fuente
Hola, solo quería compartir un alias que creé que hace lo mismo:
Agregue lo siguiente a su ~ / .gitconfig
El uso se ve así:
fuente