Visual Studio Code - supprimer les branches supprimées sur GitHub qui apparaissent toujours dans VS Code?

88

Dans VSCode, après avoir effectué une pull request et supprimé la branche sur GitHub, cette branche apparaît toujours dans Visual Studio Code. Si je sélectionne la branche, cela donne une erreur, comme prévu.

Comment supprimer ces branches maintenant supprimées de VSCode - puis-je le faire automatiquement?

Drenai
la source
2
Pour suivre (3 ans plus tard), la bonne réponse pour moi est une combinaison de git fetch --prunemettre à jour / supprimer les références de branche distante et git branch -d <branch-name>de supprimer la branche locale ( -Dpour forcer). La palette de redémarrage VSCode
Drenai
Pas besoin de redémarrer VS Code, appuyez simplement sur le bouton Actualiser dans le menu Contrôle de la source
COMME
En fait, je crée une fonction pour gérer cela et j'écris un petit article à ce sujet. Link
davidhu

Réponses:

144

Apparemment, cette fonctionnalité est intentionnelle. J'ai découvert qu'une manière correcte de supprimer toutes les branches distantes qui ont été supprimées de Github est d'exécuter la commande suivante.

git fetch --prune

Redémarrez ensuite Visual Studio pour supprimer les branches de la palette de commandes

Davidhu
la source
6
@Brian, cela ne supprime aucune succursale locale que vous avez. Cette commande supprime le origin/branch_namedu menu git de changement rapide sur VSCode. Par exemple, si vous avez une branche locale testet que vous la poussez sur Github, il y a deux branches test, et origin/testdans le menu de la branche git, l'élagage supprime uniquement la origin/testbranche, pas la testbranche.
davidhu
@Brian J'ai trouvé que cela effacerait les branches supprimées à distance après un redémarrage de VS Code
David Wilton
cette commande ne fonctionne pas. Je vois toujours toutes les branches de la liste à la fois lorsque vous faites une commande git branchou cliquez sur le nom de la branche pour voir une liste déroulante avec toutes les branches disponibles
Anna Olshevskaia
@AnnaOlshevskaia git branchne liste que les branches locales, cette commande est censée supprimer les remotes/branch_namebranches. Essayez git branch -ade tout voir.
davidhu
2
Pas besoin de redémarrer VS Code, appuyez simplement sur le bouton Actualiser dans le menu Contrôle de la source
COMME
67

Les branches locales peuvent être supprimées de Visual Studio Code en ouvrant la palette de commandes (Ctrl-Shift-P) puis en sélectionnant Git: Supprimer la branche ... , vous pouvez ensuite supprimer la branche locale en sélectionnant celle appropriée dans la liste.

Matthew Disney-Cook
la source
1
Je ne l'ai pas testé, mais il semble ne montrer que les branches locales, il devrait donc fonctionner comme décrit.
jave.web
2
@TylerBell Comme il le dit déjà, c'est la méthode pour supprimer la branche locale et non la branche distante.
Anbuselvan Rocky
2
cela aurait dû être la réponse. Je ne sais pas pourquoi j'ai été si stupide de ne pas le savoir moi-même. merci @ matthew-disney-cook
Serzhan Akhmetov
16

Les branches supprimées de GitHub sont bien ... juste supprimées de GitHub. Vous avez toujours une copie locale de la branche sur votre machine. Pour supprimer la branche locale, exécutez git branch -d the_local_branch. Il n'y a pas de commande dans VS Code pour le faire, mais vous pouvez démarrer le terminal dans VSCode à l'aide de la View: Toggle Integrated Terminalcommande et exécuter la commande à partir de celui-ci.

Pour plus d'informations sur la gestion des succursales, veuillez visiter la documentation git - https://git-scm.com/book/be/v2/Git-Branching-Branch-Management

Krzysztof Cieslak
la source
Hey, merci. Ouais, j'utilise les commandes git pour le moment ... mais j'espérais que vscode git sync repérerait que la télécommande les avait supprimés - ou les mettrait en évidence. Guess not :-)
Drenai
Tout à fait stupide qu'ils ne prennent pas en charge les commandes git natives dans leur ligne de commande git. Mal conçu.
Steven
également en attente d'extension ici :)
Marko
1
Veuillez consulter la réponse ci-dessus de @ matthew-disney-cook
Orangutech
15

Ouvrez la palette de commandes (Ctrl + Maj + P) et sélectionnez Git: Fetch (Prune) .

Cette fonctionnalité a été fusionnée dans VS Code le 20 novembre 2018.

tgr42
la source
1
existe-t-il un moyen de créer ce comportement par défaut de git pull dans vscode?
Tuncay Göncüoğlu
9

J'ai interprété la question comme suit: comment puis-je supprimer mes branches locales qui ont été fusionnées, depuis que j'utilise Git Fetch (Prune) à partir de la palette de commandes. Cela peut être considéré comme un "hack", mais c'est ce que j'utilise. Dans le terminal PowerShell:

$branches = (git branch --merged).replace(" ", "").replace("*", "") | ? { $_ -ne "develop" -and $_ -ne "master" }
foreach ($branch in $branches) { git branch $branch -d }

Si vous n'êtes pas familier avec PoSH, voici ce que cela fait: la première ligne obtient le nom de toutes les branches fusionnées (à l'exception de develop et master), et la deuxième ligne parcourt cette liste et exécute "git branch -d ". Tant que la branche est complètement fusionnée, vous devriez voir:

Deleted branch <branch name> (was <commit ID>).

pour chaque branche. Parfois, je vais rencontrer une branche qui ne parvient pas à être supprimée - si cela se produit et que vous êtes sûr qu'il est sûr d'être supprimé (c'est-à-dire que vous ne perdrez pas le travail local qui n'a pas été stocké), vous pouvez exécuter:

git branch <branch name> -D

Notez le D majuscule - qui supprime de force la branche locale.

Darren G
la source
C'est une commande PowerShell folle - Je dois donner un vote positif pour le courage pour avoir exécuté cela sur votre repo
Drenai
2
Il y a une fine frontière entre le génie et la folie. C'est bien loin de cette ligne, du côté de la folie.
Darren G
1
Non ce n'est pas. Ce n'est pas si complexe quand on le regarde, et de toute façon, c'est juste une traduction PowerShell des réponses d'ici: stackoverflow.com/questions/6127328/...
Scott Stafford
@ScottStafford Pour moi , une commande de 170 caractères à des branches de suppression est sur le côté complexe du simple | complexdivide😉
Drenai
6

Tout ce que vous avez à faire est d'exécuter cette commande:

git remote prune origin

Quelque chose de plus que vous pouvez faire, car c'est parfois ennuyeux d'ouvrir un terminal juste pour ça .. vous pouvez ajouter une tâche dans vscode.

Pour ce faire, veuillez suivre ces étapes:

  1. Dans VSCode View> Palette de commandes (cmd / ctrl + Shift + P)
  2. type Configurer la tâche
  3. Sélectionnez Créer un fichier tasks.json à partir du modèle et un nouveau fichier sera créé sous le dossier .vscode .
  4. À l'intérieur du tableau de tâches, ajoutez ceci:

{"label": "Git Prune", "type": "shell", "command": "git remote prune origin", "problemMatcher": []}

Comment l'utiliser:

  1. Ouvrir la palette de commandes
  2. Tapez Run Task et sélectionnez-le
  3. Sélectionnez Git Prune

Référence:

  1. Pruneau Git
Bogdan Alexandru Militaru
la source
Savez-vous si git remote prune origindiffère de la réponse acceptée de git fetch --prune? Le détail de la tâche d'exécution est génial, merci de l'avoir publié
Drenai
@Drenai Non, ce sont les mêmes. Mais pour une réponse complète, regardez ici
Bogdan Alexandru Militaru
5

Vous pouvez supprimer toutes les branches locales (sauf master) avec:

git branch -r | grep -v "master" | xargs git branch -D

Et vous pouvez supprimer toutes les branches apparaissant toujours comme origin/XXXXdans VSCode mais déjà supprimées originavec:

git fetch --prune

Remarque:

La première commande ci-dessus (tirée de https://stackoverflow.com/a/52006270/3120163 ):

  • lister toutes les branches
  • supprimer la branche principale de la liste
  • supprimer les branches de la liste
Adrien Renaud
la source
Ce serait génial si vous pouviez ajouter une explication de cette première commande - c'est très pratique 👍
Drenai
2
J'ai ajouté une explication @Drenai
Adrien Renaud le
4

J'ai trouvé un moyen de résoudre ce problème. Vous devez donc supprimer la télécommande reliée au référentiel Github, puis ajouter à nouveau la télécommande.

Toutes les branches supprimées de Github n'apparaîtront plus dans vscode. En supposant que originc'est le nom du référentiel distant.

git remote remove origin

ensuite

git remote add origin [email protected]:your-username/repo-name.git
Davidhu
la source
1
Pas que je sache de. C'est le seul moyen que j'ai trouvé qui supprimera les branches distantes qui n'existent plus.
davidhu
3

La commande la plus courte est:

git fetch -p
Al Gol
la source