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.
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.
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
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 {}