Comment supprimer une balise à distance ?

Comment supprimer un tag Git qui a déjà été poussé ?

Solution

Il suffit de pousser une référence "vide" vers le nom du tag distant :

git push origin :tagname

Ou, de manière plus expressive, utilisez l'option --delete (ou -d si votre version de git est antérieure à 1.8.0) :

git push --delete origin tagname

Notez que git dispose d'un espace de noms de tags et d'un espace de noms de branches. Vous pouvez donc utiliser le même nom pour une branche et pour un tag. Si vous voulez vous assurer que vous ne pouvez pas accidentellement supprimer la branche au lieu de la balise, vous pouvez spécifier full ref qui ne supprimera jamais une branche :

git push origin :refs/tags/tagname

Si vous devez également supprimer la balise locale, utilisez :

git tag --delete tagname

Background

Pousser une branche, un tag ou toute autre référence vers un dépôt distant implique de spécifier "quel dépôt, quelle source, quelle destination ?".

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

Voici un exemple concret où vous poussez votre branche principale vers la branche principale de l'origine :

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

Ce qui, à cause des chemins par défaut, peut être raccourci en :

git push origin master:master

Les balises fonctionnent de la même manière :

git push origin refs/tags/release-1.0:refs/tags/release-1.0

Qui peut aussi être raccourci en :

git push origin release-1.0:release-1.0

En omettant la référence de la source (la partie avant les deux points), vous envoyez "rien" à la destination, en supprimant la référence à l'extrémité distante.

Commentaires (9)

Une manière plus directe est

git push --delete origin YOUR_TAG_NAME

La syntaxe du préfixe deux-points est un peu bizarre dans cette situation.

Commentaires (5)

Si vous avez un tag distant v0.1.0 à supprimer, et que votre distant est origin, alors simplement :

git push origin :refs/tags/v0.1.0

Si vous devez également supprimer la balise localement :

git tag -d v0.1.0

Voir la réponse d'Adam Franco pour une explication de la syntaxe inhabituelle : de Git pour la suppression.

Commentaires (5)