web-dev-qa-db-fra.com

Supprimer toutes les balises d'un référentiel Git

Je souhaite supprimer toutes les balises d'un référentiel Git. Comment puis je faire ça?

En utilisant git tag -d tagname, supprimez localement la balise tagname et en utilisant git Push --tags, je mets à jour les balises sur le fournisseur git.

J'ai essayé:

git tag -d *

Mais je vois que * signifie les fichiers du répertoire actuel.

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...

Considérez que j'ai beaucoup de balises et que je veux toutes les supprimer.

171
Ionică Bizău
git tag | xargs git tag -d

Utilisez simplement la philosophie Linux où vous faites un pipe. Sous Windows, utilisez git bash avec la même commande.

326
Florian Margaine

Pour supprimer les tags distants (avant de supprimer les tags locaux), procédez simplement:

git tag -l | xargs -n 1 git Push --delete Origin

puis supprimez les copies locales:

git tag | xargs git tag -d
142
karlingen

Il peut être plus efficace d’appuyer sur supprimer toutes les balises en une seule commande. Surtout si vous en avez plusieurs centaines.

Dans un shell non Windows approprié, supprimez toutes les balises distantes:

git tag | xargs -L 1 | xargs git Push Origin --delete

Puis supprimez toutes les balises locales:

git tag | xargs -L 1 | xargs git tag --delete

Cela devrait être correct tant que vous n'avez pas de ' dans vos noms de balises. Pour cela, les commandes suivantes devraient être OK.

git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git Push Origin --delete
git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git tag --delete

Il existe probablement d'autres moyens de prendre une liste de lignes, de les mettre entre guillemets, de les transformer en une seule ligne et de transmettre cette ligne à une commande. Considérant que c'est l'environnement ultime de la peau de chat et tout.

38
Richard A Quadling

Ajout à la réponse de Stefan qui manquait comment supprimer les étiquettes de la télécommande. Pour Windows PowerShell, vous pouvez exécuter ceci pour supprimer les balises distantes en premier, suivies des balises locales. 

git tag | foreach-object -process { git Push Origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  
20
Yong Choi

Pour les utilisateurs Windows utilisant PowerShell:

git tag | foreach-object -process { git tag -d $_ }

Cela supprime toutes les balises renvoyées par git tag en exécutant git tag -d pour chaque ligne renvoyée.

19
Stefan Domnanovits

Pour les utilisateurs de Windows: 

Ceci supprime toutes les balises locales en exécutant git tag et en alimentant cette liste avec git tag -d:

FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a

(Trouvé sur: https://Gist.github.com/RandomArray/fdaa427878952d9768b0 )

10
Gigi2m02

Si vous n'avez pas les tags dans votre référentiel local, vous pouvez supprimer les tags distants sans avoir à les apporter à votre référentiel local.

git ls-remote --tags --refs Origin | cut -f2 | xargs git Push Origin --delete

N'oubliez pas de remplacer "Origine" par le nom de votre gestionnaire distant.

8
Valtoni Boaventura

Vous pouvez aussi utiliser:

git tag -d $(git tag)
5
ViZeke

Puisque toutes ces options ne fonctionnent que sous Linux, voici l'équivalent Windows pour tous ceux qui doivent gérer cela: FOR /F usebackq %t IN (git tag) DO @git tag --delete %t

0
DarkWiiPlayer