En bref;
- Comment puis-je supprimer plusieurs télécommandes fusionnées à distance?
Plus de fond;
J'ai un git repo avec des dizaines de télécommandes qui ont été fusionnées dans master. Je peux supprimer ces télécommandes une par une en utilisant:
git push --delete origin myBranch-1234
Cependant, il s'agit d'un processus lent et fastidieux pour toutes les télécommandes. J'essaye donc 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, je m'attends à ce que cela rassemble toutes les télécommandes fusionnées et les supprime.
Lorsque j'exécute la commande ci-dessus, je reçois ce qui suit 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 vérifier chacune d'elles. De nombreux sites et personnes recommandent que je cours git fetch --prune
pour nettoyer les références manquantes. Cela ne fait rien car toutes ces télécommandes existent.
Alors je vous demande, cher échange de pile;
- Pourquoi puis-je supprimer une télécommande, mais pas plusieurs?
- Ma commande est-elle correcte?
Je pense qu'il me manque quelque chose de petit. Chaque fois que je recherche cela, il semble que je le fais correctement, mais j'obtiens les erreurs ci-dessus.
la source
--prune
? À mon avis, c'est assez trompeurorigin/
dans les noms des succursales, comme décrit / résolu dans d'autres réponses.Ces branches sont-elles supprimées de la télécommande (origine)? Si oui, vous pouvez simplement faire
Sinon, ils pourraient revenir même après les avoir supprimés localement.
Mise à jour: en regardant à nouveau votre commande, il semble que vous ne la construisiez pas correctement. Tu veux probablement
mais à la place, vous faites quelque chose comme
la source
git branch -r --merged
, puis j'essaye de les supprimer avecxargs git push origin --delete
. La commande tente de supprimer les télécommandes, sauf qu'elle pense que leremote ref does not exist
.xargs
pour voir ce qui est réellement exécuté.origin/
préfixe sur le nom de la branche, git sait déjà que vous travaillez avec les branches d'origine depuis que vous exécutezgit push origin
. La suggestion de Mykola était de faire la dernière partie de la commandexargs echo
, plutôt queecho xargs [...]
.Utilisez
sed
pour supprimer la partie 'origine /' et modifier unexargs
partie lttile .la source