Comment supprimer une balise Git qui a déjà été poussée?
Il vous suffit de pousser une référence «vide» au nom de la balise distante:
git push origin :tagname
Ou, plus expressivement, utilisez l' --delete
option (ou -d
si votre version git est antérieure à 1.8.0):
git push --delete origin tagname
Notez que git a un espace de noms de balise et un espace de noms de branche, vous pouvez donc utiliser le même nom pour une branche et pour une balise. Si vous voulez vous assurer que vous ne pouvez pas supprimer accidentellement la branche au lieu de la balise, vous pouvez spécifier une référence complète 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
Pousser une branche, une balise ou une autre référence vers un référentiel distant implique de spécifier "quel dépôt, quelle source, quelle destination?"
git push remote-repo source-ref:destination-ref
Un exemple réel où vous poussez votre branche principale vers la branche principale d'origine est:
git push origin refs/heads/master:refs/heads/master
Qui, en raison 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 également être raccourci en:
git push origin release-1.0:release-1.0
En omettant la référence source (la partie avant les deux points), vous poussez «rien» vers la destination, supprimant la référence à l'extrémité distante.
git push --delete origin tag1 tag2
. Il en va de même pour la suppression des balises localesgit tag -d tag1 tag2
tag
est attaché à un seul commit uniquement. Pour cette raison, le nom de la branche n'est pas pertinent.git tag -d `git tag`
cela supprimera toutes les balises locales. Il en va de mêmegit push --delete origin `git tag`
si vous avez tiré les balises distantes localement. C'était pratique dans un environnement de test.Une manière plus simple est
La syntaxe de préfixe IMO du côlon est un peu étrange dans cette situation
la source
git push --delete origin "TAGNAME"
:, où TAGNAME est le nom de la balise d'origine.tag
avant le nom de votre balise pour vous assurer d'obtenir la balise, pas la branche.refs/tags/
, comme ceci:refs/tags/v2.3.1
.Si vous avez une balise distante
v0.1.0
à supprimer, et votre télécommande l'estorigin
, alors:Si vous devez également supprimer la balise localement:
Voir la réponse d' Adam Franco pour une explication de la
:
syntaxe inhabituelle de Git pour la suppression.la source
fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
...?:tagname
fonctionner pour la suppression à distance.Supprimez toutes les balises locales et obtenez la liste des balises distantes :
Supprimer toutes les balises distantes
Nettoyer les balises locales
la source
Pour supprimer la balise du référentiel distant:
Vous pouvez également supprimer la balise localement:
la source
git push --delete origin TAGNAME && git tag -d TAGNAME
Depuis votre terminal, procédez comme suit:
Maintenant, allez sur Github.com et rafraîchissez-vous, ils disparaissent.
la source
your_tag_name
du dépôt local .your_tag_name
du référentiel distant .la source
Supprimer la balise locale '12345'
Supprimer la balise distante '12345' (par exemple, la version GitHub aussi)
approche alternative
la source
Notez juste que, si vous avez une branche distante nommée comme balise distante, ces commandes sont ambiguës:
Vous devez donc utiliser cette commande pour supprimer la balise:
et celui-ci pour supprimer la branche:
Sinon, vous obtiendrez une erreur comme celle-ci:
la source
Méthode jusqu'à 100 fois plus rapide pour des milliers de balises distantes
Après avoir lu ces réponses tout en devant supprimer plus de 11 000 balises, j'ai appris que ces méthodes s'appuient ou
xargs
prennent beaucoup trop de temps, sauf si vous avez des heures à graver.En difficulté, j'ai trouvé deux moyens beaucoup plus rapides. Pour les deux, commencez par
git tag
ougit ls-remote --tags
pour faire une liste des balises que vous souhaitez supprimer sur la télécommande. Dans les exemples ci-dessous, vous pouvez omettre ou remplacersorting_proccessing_etc
par toutgrep
ing,sort
ing,tail
ing ouhead
ing que vous souhaitez ( par exemple,grep -P "my_regex" | sort | head -n -200
etc. ):Cette première méthode est de loin la plus rapide, peut-être 20 à 100 fois plus rapide que l'utilisation
xargs
, et fonctionne avec au moins plusieurs milliers de balises à la fois.Comment cela marche-t-il? La liste normale de balises séparées par des lignes est convertie en une seule ligne de balises séparées par des espaces, chacune étant précédée de
:
cela. . .L'utilisation
git push
de cette balise format ne pousse rien dans chaque référence distante, l'effaçant (le format normal pour pousser de cette façon estlocal_ref_path:remote_ref_path
).La deuxième méthode est divisée en une réponse distincte ailleurs sur cette même page
Après ces deux méthodes, vous souhaiterez probablement également supprimer vos balises locales. C'est beaucoup plus rapide, nous pouvons donc recommencer à utiliser
xargs
etgit tag -d
, ce qui est suffisant.OU similaire à la suppression à distance:
la source
Si vous utilisez SourceTree - une excellente interface graphique Git - vous pouvez facilement le faire sans la ligne de commande en procédant comme suit:
YOUR_TAG_NAME sera désormais supprimé de votre référentiel local et de toutes les télécommandes - que ce soit GitHub, BitBucket ou partout ailleurs que vous avez répertorié en tant que télécommande pour ce référentiel.
De plus, si vous avez supprimé une balise localement mais pas sur les origines distantes et que vous souhaitez la supprimer partout, créez simplement une nouvelle balise qui porte le même nom et est attachée au même commit que les origines. Ensuite, répétez les étapes ci-dessus pour supprimer partout.
la source
Si vous avez créé une balise appelée
release01
dans un référentiel Git, vous devez la supprimer de votre référentiel en procédant comme suit:Pour en supprimer un d'un référentiel Mercurial:
Veuillez faire référence à https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
la source
Si vous utilisez PowerShell et que vous souhaitez en supprimer un tas:
Bien sûr, vous pouvez également les filtrer avant de les supprimer:
la source
Comme l'a suggéré @CubanX, j'ai séparé cette réponse de mon original:
Voici une méthode qui est plusieurs fois plus rapide
xargs
et peut évoluer beaucoup plus avec le peaufinage. Il utilise l' API Github , un jeton d'accès personnel, et exploite l'utilitaireparallel
.parallel
possède de nombreux modes de fonctionnement, mais met généralement en parallèle toutes les commandes que vous lui donnez tout en vous permettant de définir des limites sur le nombre de processus. Vous pouvez modifier le--jobs 2
paramètre pour permettre un fonctionnement plus rapide, mais j'ai eu des problèmes avec les limites de débit de Github , qui sont actuellement de 5000 / heure, mais semblent également avoir une limite à court terme non documentée.Après cela, vous voudrez probablement aussi supprimer vos balises locales. C'est beaucoup plus rapide, nous pouvons donc recommencer à utiliser
xargs
etgit tag -d
, ce qui est suffisant.la source
Les autres réponses indiquent comment y parvenir, mais vous devez garder à l'esprit les conséquences car il s'agit d'un référentiel distant.
La page de manuel git tag, dans la section On Retagging , explique bien comment informer courtoisement les autres utilisateurs du dépôt distant du changement. Ils donnent même un modèle d'annonce pratique pour communiquer comment les autres devraient obtenir vos modifications.
la source
Je voulais supprimer toutes les balises à l'exception de celles qui correspondent à un modèle afin de pouvoir supprimer toutes les balises de production, à l'exception des deux derniers mois, voici ce que j'ai utilisé avec beaucoup de succès:
Supprimer toutes les balises distantes et exclure l'expression de la suppression
Supprimer toutes les balises locales et exclure l'expression de la suppression
la source
Script simple pour supprimer la balise donnée des emplacements locaux et d'origine. Avec une vérification si la balise existe vraiment.
Comment utiliser:
la source
Il semble que beaucoup de travail soit
xargs
déjà accompli. En regardant à travers ce fil, je suppose que la lenteur avecxargs
laquelle vous avez vécu est parce que la réponse originale a été utiliséexargs -n 1
alors qu'elle n'en avait pas vraiment besoin.C'est équivalent à votre méthode, sauf qu'elle
xargs
traite automatiquement la longueur maximale de la ligne de commande:xargs
peut également exécuter des processus en parallèle. Méthode 2 avecxargs
:Ce qui précède utilise un maximum de 5 processus pour gérer un maximum de 100 arguments dans chaque processus. Vous pouvez expérimenter avec les arguments pour trouver ce qui fonctionne le mieux pour vos besoins.
la source
Si vous avez créé une balise commençant par le caractère # , par exemple
#ST002
, vous pourriez constater que vous ne pouvez pas supprimer en utilisant des modèles normaux. c'est à direNe supprimera pas la balise, mais l'enveloppera dans un String Literal comme ceci
Cela le supprimera. En espérant que cela aidera quelqu'un qui a fait l'erreur d'utiliser # pour écrire les noms des balises.
la source
Voici un testcase local pour le tester localement sans jouer avec une télécommande:
la source
Salut, je voulais juste partager un alias que j'ai créé qui fait la même chose:
Ajoutez ce qui suit à votre ~ / .gitconfig
L'utilisation ressemble à:
la source