Comment supprimer les noms de branche supprimés de la saisie semi-automatique?

120

J'avais l'habitude git branch -d myBranchde supprimer une branche. Cependant, lorsque je suis sur master et que j'essaye de commander une nouvelle branche avec git checkout, myBranchapparaît toujours dans l'onglet-autocomplete.

Comment supprimer le nom myBranchde l'onglet de saisie semi-automatique pour git checkout?

John Hoffman
la source
10
Est -ce git branch -aencore la liste soit myBranchou origin/myBranch? Notez que, même s'il myBranchn'existe pas, git checkout myBranchest toujours un raccourci valide pour git checkout -b myBranch origin/myBranchsi origin/myBranchexiste.
twalberg
2
@twalberg vaut la peine d'être affiché comme réponse.
cmbuckley

Réponses:

81

Une des raisons possibles à cela est que, si une branche distante (par exemple origin/myBranch) existe toujours, git checkout myBranchelle réussira comme alternative à git checkout -b myBranch origin/myBranch. Ceci est conçu comme une commodité pour le cas courant de l'extraction d'une branche distante pour la première fois, créant une branche de suivi locale portant le même nom.

Il existe également d'autres possibilités, en fonction de ce que vous utilisez exactement pour l'achèvement, mais c'est l'une des premières choses que je vérifierais. Si vous exécutez git branch -aet qu'il existe une origin/myBranchliste (ou une pour une télécommande autre que origin, si vous en avez), c'est probablement un coupable.

Twalberg
la source
2
Merci! Cela semble être le coupable. origin/myBranchexiste encore. Si j'ai supprimé la myBranchbranche sur Github (via l'interface en ligne), puis-je appeler git branch -d origin/myBranchen toute sécurité pour supprimer cette branche distante?
John Hoffman
99
@JohnHoffman Cela devrait être sûr, mais je pense que la meilleure solution serait git fetch --prune origin. Cela nettoiera toutes les branches de suivi locales qui n'existent plus sur la télécommande.
twalberg
3
@twalberg Je ne pense pas que la simple suppression de la branche locale et distante soit suffisante pour se débarrasser de toutes les anciennes branches en autocomplétion. Je pense que vous devez le faire git fetch --prune originpour que les références locales aux succursales distantes disparaissent lors de la saisie semi-automatique. Il serait peut-être bon de passer du commentaire à la réponse. En tout cas merci pour votre réponse car elle m'a aidé!
timmyl
4
git branch -am'a conduit sur la bonne voie; mon collègue a suggéré git fetch --prune --alld'élaguer toutes les branches mortes de toutes les télécommandes, ce qui est utile lorsque vous travaillez avec beaucoup de développeurs avec beaucoup de fourches.
ericsoco
173

git fetch --prune --all

Publier ceci comme sa propre réponse car il s'agit d'une solution sur une ligne, mais si vous votez, assurez-vous de voter pour la réponse de @ twalberg ci-dessus.

la suggestion de @ twalberg pour git branch -ame conduire sur la bonne voie; mon collègue a suggéré git fetch --prune --alld'élaguer toutes les branches mortes de toutes les télécommandes, ce qui est utile lorsque vous travaillez avec beaucoup de développeurs avec beaucoup de fourches.

ericsoco
la source
19
Alors que la réponse acceptée donne une belle explication pourquoi cela se produit, cette réponse présente une solution réelle au problème et devrait donc être acceptée à mon humble avis.
Patrick Oscity
3
les noms des branches mortes sont toujours affichés lors de la saisie semi-automatique.
Fitsyu