git supprimer les télécommandes: les réf à distance n'existent pas

en bref;

  • Comment puis-je supprimer les télécommandes multiples fusionnées?

plus d'information;

j'ai un git repo avec des dizaines de télécommandes qui ont été fusionnées en master. Je peux supprimer ces télécommandes une à la fois en utilisant:

git push --delete origin myBranch-1234

cependant, il s'agit d'un processus lent et fastidieux pour tous les télécommandes. J'essaie donc cette commande:

git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete

git branch -r --merged liste toutes les télécommandes fusionnées.

grep origin indique à la commande d'inclure l'origine.

grep -v master indique la commande d'exclure le maître.

xargs git push origin --delete indique la commande de supprimer la liste des télécommandes.

tous ensemble, je m'attends à ce que cela rassemble tous les télécommandes fusionnées et les supprimer.

quand j'exécute la commande ci-dessus, je reçois ce qui suit pour chaque fusionné à distance;

error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc

cependant ces télécommandes existent et je peux vérifier chacune d'elles. De nombreux sites et personnes recommandent que je lance git fetch --prune pour nettoyer les références manquantes. Cela ne fait rien parce que tous ces télécommandes existent.

alors je vous le demande, cher stack exchange;

  • pourquoi supprimer une télécommande, mais pas beaucoup?
  • est-ce que mon ordre est correct?

je pense que je manque quelque chose de petit. Chaque fois que je recherche ceci, il semble que je fais cela correctement, mais je reçois les erreurs ci-dessus.

66
demandé sur Community 2015-08-21 21:27:03

3 réponses

vous devrez peut-être d'abord tailler votre" cache " local de branches distantes. Essayez de courir:

git fetch -p origin

avant suppression.

152
répondu Igor 2016-03-17 20:40:52

ces branches sont-elles retirées de la télécommande (origine)? Si oui, vous pouvez simplement faire

git fetch --prune origin

sinon ils pourraient revenir même après que vous les supprimez localement.

mise à jour: en regardant votre commande à nouveau, il semble que vous la construisez incorrectement. Vous voulez probablement

git push origin --delete myBranch-1234

mais à la place vous faites quelque chose comme

git push origin --delete origin/myBranch-1234
66
répondu Mykola Gurov 2016-08-23 21:20:17

utiliser sed pour supprimer la partie" origine/ "et changer la partie "lttile 151920920".

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\/// |  xargs -I{} git push origin --delete {}
9
répondu kost 2016-10-12 23:48:20