web-dev-qa-db-fra.com

git delete télécommandes: les références distantes n'existent pas

En bref;

  • Comment puis-je supprimer plusieurs télécommandes fusionnées à distance?

Plus de fond;

J'ai un repo git 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 toutes les télécommandes. Alors j'essaie cette commande:

git branch -r --merged | grep Origin | grep -v master | xargs git Push Origin --delete

git branch -r --merged Répertorie 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.

Dans l’ensemble, j’espère que cela regroupera toutes les télécommandes fusionnées et les supprimera.

Lorsque j'exécute la commande ci-dessus, je reçois le message suivant pour chaque télécommande fusionnée.

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 les commander toutes les deux. De nombreux sites et personnes recommandent que j'exécute git fetch --Prune Pour nettoyer les références manquantes. Cela ne fait rien car toutes ces télécommandes existent.

Je vous le demande donc, cher échange de piles;

  • Pourquoi puis-je supprimer une télécommande, mais pas beaucoup?
  • Est-ce que ma commande est correcte?

Je pense que je manque quelque chose de petit. Chaque fois que je fais des recherches, il semble que je le fasse correctement, mais je reçois les erreurs ci-dessus.

94
Jqw

Vous devrez peut-être d'abord élaguer votre "cache" local des branches distantes. Essayez de courir:

git fetch -p Origin

avant de supprimer.

198
Igor

Ces branches sont-elles supprimées de la télécommande (Origin)? Si oui, vous pouvez simplement faire

git fetch --Prune Origin

Sinon, ils risquent de revenir même après les avoir supprimés localement.

Mise à jour: Si vous regardez à nouveau votre commande, il semble que vous ne la construisez pas correctement. Vous voulez probablement

git Push Origin --delete myBranch-1234

mais au lieu de cela, vous faites quelque chose comme

git Push Origin --delete Origin/myBranch-1234
88
Mykola Gurov

Utilisez sed pour supprimer la partie 'Origine /' et changer un lttile xargs.

git branch -r --merged | grep Origin | grep -v -e master | sed s/Origin\\/// |  xargs -I{} git Push Origin --delete {}
12
kost