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.
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.
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
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.
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 $_ }
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.
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 )
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.
Vous pouvez aussi utiliser:
git tag -d $(git tag)
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