Come si elimina un tag git che è già stato inserito?
Come si elimina un tag git che è già stato inserito?
Devi solo inserire un riferimento "vuoto" al nome del tag remoto:
git push origin :tagname
O, più espressivamente, usa il --delete
opzione (o -d
se la tua versione git è precedente alla 1.8.0):
git push --delete origin tagname
Se hai anche bisogno di cancellare il tag locale, usa:
git tag --delete tagname
Se si spinge un ramo, un tag o un altro riferimento a un repository remoto, è necessario specificare "push dove, quale origine, quale destinazione?"
git push where-to-push source-ref:destination-ref
Un esempio del mondo reale in cui si spinge il ramo principale verso il ramo principale dell'origine è:
git push origin refs/heads/master:refs/heads/master
Quale, a causa dei percorsi predefiniti, può essere abbreviato in:
git push origin master:master
I tag funzionano allo stesso modo:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
Che può anche essere abbreviato in:
git push origin release-1.0:release-1.0
Omettendo il ref sorgente (la parte prima dei due punti), si preme "nulla" sulla destinazione, eliminando il riferimento sul terminale remoto.
Un modo più semplice è
git push --delete origin YOUR_TAG_NAME
La sintassi del colon con prefisso IMO è un po 'strana in questa situazione
Se hai un tag remoto v0.1.0
per eliminare, e il tuo telecomando è origin
, quindi semplicemente:
git push origin :refs/tags/v0.1.0
Se devi anche eliminare il tag localmente:
git tag -d v0.1.0
Vedere Adam FrancoLa risposta per una spiegazione dell'unicità di Git :
sintassi per la cancellazione.
Elimina tutti i tag locali e ottieni l'elenco dei tag remoti:
git tag -l | xargs git tag -d
git fetch
Rimuovi tutti i tag remoti
git tag -l | xargs -n 1 git push --delete origin
Pulisci i tag locali
git tag -l | xargs git tag -d
Per rimuovere il tag dal repository remoto:
git push --delete origin TAGNAME
Potresti anche voler eliminare il tag localmente:
git tag -d TAGNAME
Dal tuo terminale, fai questo:
git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
Ora vai su Github.com e aggiorna, scompaiono.
Basta notare che, se si ha un ramo remoto chiamato come tag remoto, questi comandi sono ambigui:
git push origin :tagname
git push --delete origin tagname
Quindi devi usare questo comando per cancellare il tag:
git push origin :refs/tags/<tag>
e questo per eliminare il ramo:
git push origin :refs/heads/<branch>
In caso contrario, si otterrebbe un errore come questo:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
Se hai creato un tag chiamato release01
in un repository Git lo rimuoveresti dal tuo repository procedendo come segue:
git tag -d release01
git push origin :refs/tags/release01
Per rimuoverne uno da un repository Mercurial:
hg tag --remove featurefoo
Si prega di riferimento https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
git tag -d 12345
git push origin :refs/tags/12345
git push --delete origin tagName
git tag -d tagName
Le altre risposte indicano come ottenere ciò, ma è necessario tenere presente le conseguenze poiché questo è un repository remoto.
La pagina man di git tag, nel On Retagging sezione, ha una buona spiegazione di come informare cortesemente gli altri utenti del repository remoto del cambiamento. Danno anche un utile modello di annuncio per comunicare in che modo gli altri dovrebbero ottenere le tue modifiche.
Dopo aver letto queste risposte e aver bisogno di eliminare oltre 11000 tag, ho imparato questi metodi basandosi o xargs
prenditi troppo tempo, a meno che tu non abbia ore da bruciare.
Lottando, ho trovato due tanto modi più veloci. Per entrambi, inizia con git tag
o git ls-remote --tags
per creare un elenco di tag che si desidera eliminare sul telecomando. Negli esempi seguenti è possibile omettere o sostituire sorting_proccessing_etc
con qualsiasi grep
ING, sort
ING, tail
ing o head
che vuoi (per esempio. grep -P "my_regex" | sort | head -n -200
eccetera):
xargs
e funziona con almeno alcuni mille tag alla volta.git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
Come funziona?
Il normale elenco di tag separati da linee viene convertito in una singola riga di tag separati dallo spazio, ognuno dei quali è preceduto da :
così . . .
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
utilizzando git push
con questo tag di formato spinge Niente in ogni ref remoto, cancellandolo (il formato normale per spingere in questo modo è local_ref_path:remote_ref_path
).
Dopo entrambi questi metodi, probabilmente vorrai eliminare anche i tuoi tag locali.
Questo è molto più veloce, quindi possiamo tornare a utilizzare xargs
e git tag -d
, che è sufficiente.
git tag | sorting_processing_etc | xargs -L 1 git tag -d
O simile all'eliminazione remota:
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")