Visual Studio Code - auf GitHub gelöschte Zweige entfernen, die noch in VS Code angezeigt werden?

87

In VSCode wird dieser Zweig nach einer Pull-Anforderung und dem Löschen des Zweigs auf GitHub weiterhin in Visual Studio Code angezeigt. Wenn ich den Zweig auswähle, wird erwartungsgemäß ein Fehler ausgegeben.

Wie entferne ich diese jetzt gelöschten Zweige aus VSCode - kann ich das automatisch tun?

Drenai
quelle
2
Zum Nachverfolgen (3 Jahre später) ist die richtige Antwort für mich eine Kombination aus git fetch --pruneAktualisieren / Löschen von Remote-Zweigstellenreferenzen und git branch -d <branch-name>Löschen des lokalen Zweigs ( -DErzwingen). Neustart VSCode aktualisiert Palette
Drenai
Sie müssen VS Code nicht neu starten. Klicken Sie einfach auf die Schaltfläche Aktualisieren im Menü Quellcodeverwaltung
AS
Ich baue tatsächlich eine Funktion, um damit umzugehen, und schreibe einen kleinen Artikel darüber. Link
Davidhu

Antworten:

144

Anscheinend ist diese Funktion beabsichtigt. Ich habe herausgefunden, dass eine korrekte Methode zum Entfernen aller aus Github gelöschten Remote-Zweige darin besteht, den folgenden Befehl auszuführen.

git fetch --prune

Starten Sie dann Visual Studio neu, um die Zweige aus der Befehlspalette zu entfernen

Davidhu
quelle
6
@Brian, dies entfernt keine lokalen Zweige, die Sie haben. Dieser Befehl entfernt das origin/branch_nameaus dem Quick Switch Git-Menü auf VSCode. Wenn Sie beispielsweise einen lokalen Zweig haben testund ihn an Github senden, gibt es zwei Zweige test. origin/testIm Git-Zweigmenü entfernt der Prune nur den origin/testZweig, nicht den testZweig.
Davidhu
@ Brian Ich fand, dass dies die entfernten gelöschten Zweige nach einem Neustart von VS Code löschen würde
David Wilton
Dieser Befehl funktioniert nicht. Ich sehe immer noch alle Zweige in der Liste, wenn Sie einen Befehl git branchausführen oder auf den Namen des Zweigs klicken, um eine Dropdown-Liste mit allen verfügbaren Zweigen anzuzeigen
Anna Olshevskaia,
@AnnaOlshevskaia listet git branchnur die lokalen Zweige auf, dieser Befehl soll die remotes/branch_nameZweige entfernen . Versuche git branch -aalles zu sehen.
Davidhu
2
Sie müssen VS Code nicht neu starten. Klicken Sie einfach auf die Schaltfläche Aktualisieren im Menü Quellcodeverwaltung
AS
67

Lokale Zweige können aus Visual Studio-Code entfernt werden, indem Sie die Befehlspalette (Strg-Umschalt-P) öffnen und dann Git: Zweig löschen ... auswählen. Anschließend können Sie den lokalen Zweig löschen, indem Sie den entsprechenden Zweig aus der Liste auswählen.

Matthew Disney-Cook
quelle
1
Ich habe es nicht getestet, aber es scheint nur lokale Zweige anzuzeigen, daher sollte es wie beschrieben funktionieren.
jave.web
2
@ TylerBell Wie er bereits sagt, ist dies die Methode zum Entfernen des lokalen Zweigs, nicht des entfernten Zweigs.
Anbuselvan Rocky
2
Das hätte die Antwort sein sollen. Ich weiß nicht, warum ich so dumm war, das selbst nicht zu wissen. danke @ matthew-disney-cook
Serzhan Akhmetov
16

Von GitHub entfernte Zweige sind gut ... nur von GitHub entfernt. Sie haben noch eine lokale Kopie der Verzweigung auf Ihrem Computer. So löschen Sie den lokalen Zweiglauf git branch -d the_local_branch. Es gibt keinen Befehl in VS Code, aber Sie können das Terminal in VSCode mit dem View: Toggle Integrated TerminalBefehl starten und den Befehl von dort aus ausführen.

Weitere Informationen zur Filialverwaltung finden Sie in der Git-Dokumentation unter https://git-scm.com/book/be/v2/Git-Branching-Branch-Management

Krzysztof Cieslak
quelle
Hey danke. Ja, ich verwende derzeit die git-Befehle. Ich hatte jedoch gehofft, dass vscode git sync erkennen würde, dass die Fernbedienung sie entfernt hat - oder sie hervorheben würde. Ratet mal nicht :-)
Drenai
Ziemlich dumm, dass sie keine nativen Git-Befehle in ihrer Git-Befehlszeile unterstützen. Schlecht gestaltet.
Steven
wartet auch hier auf Verlängerung :)
Marko
1
Bitte sehen Sie die obige Antwort von @ matthew-disney-cook
Orangutech
14

Öffnen Sie die Befehlspalette (Strg + Umschalt + P) und wählen Sie Git: Fetch (Prune) .

Dieses Feature wurde fusioniert in VS - Code am 20. November 2018.

tgr42
quelle
1
Gibt es eine Möglichkeit, dieses Standardverhalten von Git Pull in Vscode zu ändern?
Tuncay Göncüoğlu
9

Ich habe die Frage folgendermaßen interpretiert: Wie kann ich meine zusammengeführten lokalen Zweige löschen , da ich Git Fetch (Prune) aus der Befehlspalette verwendet habe? Dies kann als "Hack" angesehen werden, aber ich benutze es. Im PowerShell-Terminal:

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

Falls Sie mit PoSH nicht vertraut sind, geschieht Folgendes: Die erste Zeile enthält den Namen aller zusammengeführten Zweige (mit Ausnahme von "Entwickeln" und "Master"), und die zweite Zeile durchläuft diese Liste und führt "git branch -d" aus ". Solange der Zweig vollständig zusammengeführt ist, sollten Sie Folgendes sehen:

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

für jeden Zweig. Gelegentlich stoße ich auf einen Zweig, der nicht gelöscht werden kann. In diesem Fall können Sie Folgendes ausführen: Sie können sicher sein, dass das Löschen sicher ist (dh Sie verlieren keine lokale Arbeit, die nicht gespeichert wurde):

git branch <branch name> -D

Beachten Sie das Großbuchstaben D, das den lokalen Zweig zwangsweise löscht.

Darren G.
quelle
Das ist ein verrückter PowerShell-Befehl. Ich muss eine Gegenstimme für Tapferkeit abgeben, um das auf Ihrem Repo auszuführen
Drenai
2
Es gibt eine feine Linie zwischen Genie und Wahnsinn. Dies ist weit weg von dieser Linie, auf der Wahnsinnsseite.
Darren G
1
Nein, ist es nicht. Es ist nicht so komplex, wenn man es betrachtet, und es ist sowieso nur eine Powershell-Übersetzung der Antworten von hier: stackoverflow.com/questions/6127328/…
Scott Stafford
@ScottStafford Für mich ist ein Befehl mit 170 Zeichen zum Löschen von Zweigen auf der komplexen Seite der simple | complexTeilung
Drenai
6

Alles was Sie tun müssen, ist diesen Befehl auszuführen:

git remote prune origin

Etwas Besonderes, das Sie tun können, weil es manchmal ärgerlich ist, ein Terminal nur dafür zu öffnen. Sie können eine Aufgabe in vscode hinzufügen.

Führen Sie dazu bitte die folgenden Schritte aus:

  1. In VSCode- Ansicht> Befehlspalette (cmd / Strg + Umschalt + P)
  2. Geben Sie Configure Task ein
  3. Wählen Sie Create task.json file from template aus. Eine neue Datei wird im Ordner .vscode erstellt .
  4. Fügen Sie im Aufgaben-Array Folgendes hinzu:

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

Wie man es benutzt:

  1. Öffnen Sie die Befehlspalette
  2. Geben Sie Run Task ein und wählen Sie es aus
  3. Wählen Sie Git Prune

Referenz:

  1. Git beschneiden
Bogdan Alexandru Militaru
quelle
Wissen Sie, ob git remote prune originvon der akzeptierten Antwort von abweicht git fetch --prune? Das Detail der Ausführungsaufgabe ist großartig, danke, dass Sie es veröffentlicht haben
Drenai
@ Drenai Nein, sie sind die gleichen. Aber für eine vollständige Antwort schauen Sie hier
Bogdan Alexandru Militaru
5

Sie können alle lokalen Zweige (außer Master) entfernen mit:

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

Und Sie können alle Zweige entfernen, die noch wie origin/XXXXin VSCode angezeigt, aber bereits gelöscht wurden originmit:

git fetch --prune

Hinweis:

Der erste Befehl oben (entnommen aus https://stackoverflow.com/a/52006270/3120163 ):

  • Listen Sie alle Zweige auf
  • Entfernen Sie den Hauptzweig aus der Liste
  • Löschen Sie die Zweige in der Liste
Adrien Renaud
quelle
Wäre toll, wenn Sie eine Erklärung für diesen ersten Befehl hinzufügen könnten - es ist sehr praktisch 👍
Drenai
2
Ich habe eine Erklärung hinzugefügt @Drenai
Adrien Renaud
4

Ich habe einen Weg gefunden, dies zu beheben. Sie müssen also die Fernbedienung entfernen, die mit dem Github-Repo verbunden ist, und dann die Fernbedienung erneut hinzufügen.

Alle aus Github gelöschten Zweige werden nicht mehr in vscode angezeigt. Angenommen, dies originist der Name für das Remote-Repo.

git remote remove origin

Dann

git remote add origin [email protected]:your-username/repo-name.git
Davidhu
quelle
1
nicht, dass ich davon Wüste. Nur so habe ich die entfernten Zweige entfernt, die nicht mehr existieren.
Davidhu
2

Der kürzere Befehl lautet:

git fetch -p
Al Gol
quelle