Comment faire pour supprimer un point distant?
Comment vous supprimez un Git tag qui a déjà été poussé?
Vous devez vous connecter pour publier un commentaire.
Comment vous supprimez un Git tag qui a déjà été poussé?
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin de pousser un "vide" de référence de la télécommande nom de la balise:
Ou, plus expressive, de l'utilisation de la
--delete
option (ou-d
si votre version git est plus ancienne que la version 1.8.0):Noter que git a tag de noms et de la direction générale de l'espace de noms de sorte que vous pouvez utiliser le même nom pour une branche et d'une balise. Si vous voulez vous assurer que vous ne pouvez accidentellement supprimer la branche à la place de la balise, vous pouvez spécifier complet ref qui ne sera jamais supprimer une branche:
Si vous aussi, vous devez supprimer le tag local, utilisation:
Arrière-plan
Poussant une branche, un tag ou d'une ref à un dépôt distant implique de spécifier "qui repo, la source, la destination?"
Un exemple réel où vous poussez votre branche master à l'origine de la branche principale est:
Qui, en raison de chemins d'accès par défaut, peut être réduit à:
Balises fonctionnent de la même manière:
Qui peut également être réduit à:
En omettant la source ref (la partie avant le deux-points), vous appuyez sur "rien" à la destination, la suppression de la ref sur l'extrémité distante.
git push --delete origin tag1 tag2
. Même chose est valable pour les locaux tags suppressiongit tag -d tag1 tag2
tag
une étiquette universelle ou peut être épinglé à une certaine branche? Est-il possible que nous pouvons supprimer un tag sur une branche spécifique. Si oui, comment doit-on spécifier la direction générale avec la balise?tag
est attaché à un seul commit seulement. Parce que le nom de la branche n'est pas pertinent.error: dst refspec "my-tag" matches more than one. error: failed to push some refs
que je pourrais exécutergit push origin :refs/tags/my-tag
spécifiquement pour supprimer uniquement l'étiquette, et non pas la branche.git tag -d `git tag`
va supprimer toutes les balises. De même pourgit push --delete origin `git tag`
en supposant que vous avez tiré de la télécommande tags localement. C'était bien pratique dans un environnement de test.remote: GitLab: You are not allowed to change existing tags on this project.
(en réponse à essayer de supprimer un tag que j'ai créé à tort).Façon plus simple est
De l'OMI, la préfixation du côlon syntaxe est un peu étrange dans cette situation
git push --delete origin "TAGNAME"
, où TAGNAME est le nom de l'étiquette d'origine.tag
avant votre nom d'étiquette pour vous assurer d'obtenir le tag, et non de la direction générale.refs/tags/
, comme ceci:refs/tags/v2.3.1
.Si vous avez un point distant
v0.1.0
à supprimer, et votre télécommande estorigin
, puis il suffit de:Si vous aussi, vous devez supprimer le tag localement:
Voir Adam Franco's réponse pour une explication de Git est inhabituel
:
syntaxe pour la suppression.fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
...?:tagname
devrait fonctionner pour la suppression à distance.Supprimer toutes les balises et obtenir la liste de distance tags:
Supprimer tous les tags
Nettoyer les locaux tags
À enlever l'étiquette sur le dépôt distant:
Vous pouvez également supprimer la balise localement:
À partir de votre terminal, faites ceci:
Maintenant, allez à Github.com et de rafraîchissement, ils disparaissent.
Il suffit de remarquer que, si vous avez une branche distante nommé comme un point distant, ces commandes sont ambigus:
De sorte que vous devez utiliser cette commande pour supprimer le tag:
et celle-ci à supprimer la branche:
Si pas, vous obtenez un message d'erreur comme ceci:
Supprimer local tag '12345'
Supprimer à distance de la balise '12345' (par exemple; GitHub version trop)
approche alternative
Si vous avez créé une balise appelée
release01
dans un dépôt Git vous souhaitez supprimer à partir de votre référentiel en procédant comme suit:Pour supprimer un à partir d'un dépôt Mercurial:
Veuillez référence https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551
Jusqu'à 100 fois plus rapide méthode pour des milliers de distance tags
Après la lecture par le biais de ces réponses tout en ayant besoin de supprimer plus de 11 000 balises, j'ai appris que ces méthodes reposant ou
xargs
beaucoup trop long, à moins que vous ayez des heures à brûler.En difficulté, j'ai trouvé deux beaucoup des manières plus rapides. Pour les deux, commencer avec
git tag
ougit ls-remote --tags
de faire une liste de balises que vous souhaitez supprimer de la télécommande. Dans les exemples ci-dessous, vous pouvez omettre ou de remplacersorting_proccessing_etc
avec toutgrep
ing,sort
ing,tail
ing ouhead
ing vous voulez (par exemplegrep -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 un minimum de plusieurs mille étiquettes à la fois.Comment cela fonctionne?
La normale, ligne-liste séparée par des balises est convertie en une seule ligne de séparés par des espaces, des balises, chaque précédées de
:
donc . . .À l'aide de
git push
avec ce format balise pousse rien dans chaque télécommande réf, de l'effacer (le format normal pour pousser cette façon estlocal_ref_path:remote_ref_path
).La deuxième méthode est éclaté comme une réponse distincte d'ailleurs sur cette même page
Après ces deux méthodes, vous aurez probablement envie de le supprimer de votre localité étiquettes de trop.
C'est beaucoup plus rapide afin que nous puissions revenir en arrière à l'aide de
xargs
etgit tag -d
, ce qui est suffisant.OU similaire à la télécommande supprimer:
L'autre répond point comment accomplir cela, mais vous devez garder à l'esprit les conséquences, puisque c'est un dépôt distant.
Le git tag page de man, dans la Sur Retagging section, a une bonne explication de la façon de courtoisie informer le repo distant d'autres utilisateurs de les modifier. Ils donnent même une pratique modèle pour l'annonce pour communiquer comment les autres doivent obtenir vos modifications.
Si vous utilisez SourceTree - un grand Git GUI - alors vous pouvez facilement le faire sans la ligne de commande en procédant de la manière suivante:
YOUR_TAG_NAME va maintenant être retiré de votre dépôt local et toutes les télécommandes - être il GitHub, BitBucket, ou n'importe où ailleurs que vous avez énuméré comme l'un de la télécommande de ce référentiel.
Aussi, si vous avez supprimé un tag en local, mais pas sur la télécommande d'origine et vous souhaitez le supprimer partout, puis il suffit de créer une nouvelle balise qui a le même nom et est attaché à la même commettre les origines. Ensuite, répétez les étapes ci-dessus à supprimer partout.
Comme @CubanX suggéré, j'ai divisé cette réponse de mon original:
Ici est une méthode qui est plusieurs fois plus rapide que
xargs
et peuvent échelle beaucoup plus avec des ajustements. Il utilise le API Github, un jeton d'accès, et tire profit de l'utilitaire deparallèle
.parallèle
a de nombreux modes de fonctionnement, mais en général, parallelizes toute commande vous donner tout en vous permettant de définir des limites sur le nombre de processus. Vous pouvez modifier la--jobs 2
paramètre pour permettre le fonctionnement plus rapide, mais j'ai eu des problèmes avec Github du limites de fréquence, qui sont actuellement 5000/h, mais semble aussi avoir un sans-papiers à court terme limite ainsi.Après cela, vous aurez probablement envie de le supprimer de votre localité étiquettes de trop.
C'est beaucoup plus rapide afin que nous puissions revenir en arrière à l'aide de
xargs
etgit tag -d
, ce qui est suffisant.J'ai voulu supprimer toutes les balises sauf pour ceux qui correspondent à un modèle afin que je puisse les supprimer tous, mais le dernier couple de mois de production de tags, voici ce que j'ai utilisé avec beaucoup de succès:
Supprimer Toutes les Balises & Exclure l'Expression De Supprimer
Supprimer Toutes les Balises & Exclure l'Expression De Supprimer
Simple script pour supprimer compte tenu de la balise à la fois en local et à l'origine des lieux.
Avec un chèque si le tag existe vraiment.
Comment utiliser:
)
Ressemble à beaucoup de travail pour quelque chose
xargs
déjà fait. En regardant en arrière à travers ce fil, je devine que la lenteur avecxargs
que vous avez vécu est parce que l'original de la réplique utiliséexargs -n 1
quand il n'en a pas vraiment besoin.C'est l'équivalent de votre méthode, sauf qu'
xargs
gère automatiquement le maximum de la ligne de commande longueur:xargs
pouvez exécuter des processus en parallèle trop. Méthode 2 avecxargs
:Ci-dessus utilise un maximum de 5 processus pour prendre en charge un maximum de 100 arguments dans chaque processus. Vous pouvez expérimenter avec les arguments de trouver ce qui fonctionne le mieux pour vos besoins.
Première ligne supprime
your_tag_name
de la locale de pensions et une seconde supprime de distance des pensions. Maintenant your_tag a été supprimé complètement, à la fois locaux et distants repo, mais parfois vous pouvez avoir besoin de supprimer supprimé balise rédigé par GitHub manuellement dans votre communiqué de la section.Si vous êtes à l'aide de PowerShell, et vous voulez supprimer un tas d'entre eux:
Bien sûr, vous pouvez également filtrer avant de les supprimer:
Si vous avez une étiquette de créé en commençant par le # caractère, par exemple,
#ST002
, vous trouverez peut-être que u ne parvenez pas à supprimer à l'aide de modèles normaux. c'est à direNe va pas supprimer la balise, mais en l'enveloppant dans un Littéral de Chaîne comme
Qui sera supprimé. En espérant que cela aidera quelqu'un qui a fait l'erreur d'utiliser des # à écrire les noms de balise.
Ici est un cas de test pour tester localement sans vous embêter avec une télécommande:
Salut, je voulais juste partager un alias que j'ai créé qui fait la même chose:
Ajouter les éléments suivants à votre ~/.gitconfig
L'utilisation ressemble: