Come cancellare un tag remoto?

Come si cancella un tag Git che è già stato spinto?

Soluzione

Hai solo bisogno di spingere un 'empty' riferimento al nome del tag remoto:

git push origin :tagname

Oppure, in modo più espressivo, usa l'opzione --delete (o -d se la tua versione di git è più vecchia della 1.8.0):

git push --delete origin tagname

Nota che git ha il namespace dei tag e il namespace dei rami, quindi puoi usare lo stesso nome per un ramo e per un tag. Se vuoi essere sicuro di non poter rimuovere accidentalmente il ramo invece del tag, puoi specificare full ref che non cancellerà mai un ramo:

git push origin :refs/tags/tagname

Se hai anche bisogno di cancellare il tag locale, usa:

git tag --delete tagname

Sfondo

Spingere un ramo, un tag o un altro ref a un repository remoto implica specificare "quale repo, quale sorgente, quale destinazione?

git push remote-repo source-ref:destination-ref

Un esempio del mondo reale in cui si spinge il proprio ramo master al ramo master dell'origine è:

git push origin refs/heads/master:refs/heads/master

Che 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 di origine (la parte prima dei due punti), si spinge 'niente' alla destinazione, cancellando il ref sul lato remoto.

Commentari (9)

Un modo più diretto è

git push --delete origin YOUR_TAG_NAME

IMO la sintassi dei due punti è un po' strana in questa situazione

Commentari (5)

Se avete un tag remoto v0.1.0 da cancellare, e il vostro remoto è origin, allora semplicemente:

git push origin :refs/tags/v0.1.0

Se hai anche bisogno di cancellare il tag localmente:

git tag -d v0.1.0

Vedi Adam Franco'risposta per una spiegazione dell'insolita sintassi di Git : per la cancellazione.

Commentari (5)