Visual Studio Code - usunąć gałęzie usunięte z GitHub, które nadal są wyświetlane w VS Code?

88

W VSCode, po wykonaniu żądania ściągnięcia i usunięciu gałęzi na GitHub, ta gałąź nadal pojawia się w Visual Studio Code. Jeśli wybiorę gałąź, zgodnie z oczekiwaniami wyświetli się błąd.

Jak usunąć te teraz usunięte gałęzie z VSCode - czy mogę to zrobić automatycznie?

Drenai
źródło
2
Aby kontynuować (3 lata później), poprawną odpowiedzią dla mnie jest połączenie git fetch --pruneaktualizacji / usunięcia odwołań git branch -d <branch-name>do zdalnego oddziału i usunięcia lokalnego oddziału ( -Dwymuszenie). Restart VSCode odświeża paleta
Drenajów
Nie ma potrzeby, aby ponownie uruchomić kod VS, wystarczy nacisnąć przycisk Odśwież w menu sterowania Źródło
AS
Właściwie buduję funkcję do obsługi tego i piszę o tym mały artykuł. Link
davidhu

Odpowiedzi:

144

Najwyraźniej ta funkcja jest zamierzona. Dowiedziałem się, że poprawnym sposobem na usunięcie wszystkich zdalnych gałęzi, które zostały usunięte z Github, jest uruchomienie następującego polecenia.

git fetch --prune

Następnie uruchom ponownie program Visual Studio, aby usunąć gałęzie z palety poleceń

davidhu
źródło
6
@Brian, to nie usuwa żadnych lokalnych oddziałów, które masz. To polecenie usuwa origin/branch_namez menu szybkiego przełączania git w VSCode. Na przykład, jeśli masz lokalną gałąź testi wypchniesz ją na Github, są dwie gałęzie test, aw origin/testmenu git branch prune usuwa tylko origin/testgałąź, a nie testgałąź.
davidhu
@Brian Odkryłem, że to wyczyści zdalne usunięte gałęzie po ponownym uruchomieniu VS Code
David Wilton,
to polecenie nie działa. Wciąż widzę wszystkich oddziałów na liście zarówno kiedy to polecenie git branchlub kliknąć na nazwę oddziału, aby zobaczyć listę rozwijaną z wszelkich dostępnych gałęzi
Anna Olshevskaia
@AnnaOlshevskaia wyświetla git branchtylko lokalne gałęzie, to polecenie ma usunąć remotes/branch_namegałęzie. Spróbuj git branch -azobaczyć wszystko.
davidhu
2
Nie ma potrzeby, aby ponownie uruchomić kod VS, wystarczy nacisnąć przycisk Odśwież w menu sterowania Źródło
AS
67

Lokalne gałęzie można usunąć z Visual Studio Code, otwierając paletę poleceń (Ctrl-Shift-P), a następnie wybierając Git: Usuń gałąź ... , możesz następnie usunąć lokalną gałąź, wybierając odpowiednią z listy.

Matthew Disney-Cook
źródło
1
Nie testowałem tego do końca, ale wydaje się, że pokazuje tylko lokalne oddziały, więc powinno działać zgodnie z opisem.
jave.web
2
@TylerBell Jak już mówi, jest to metoda usuwania lokalnego oddziału, a nie zdalnego.
Anbuselvan Rocky
2
to powinna być odpowiedź. nie wiem, dlaczego byłem tak głupi, że sam o tym nie wiedziałem. dziękuję @ matthew-disney-cook
Serzhan Achmetov
16

Gałęzie usunięte z GitHub są dobrze ... właśnie usunięte z GitHub. Nadal masz lokalną kopię oddziału na swoim komputerze. Aby usunąć lokalny oddział, uruchom git branch -d the_local_branch. W programie VS Code nie ma polecenia, które mogłoby to zrobić, ale możesz uruchomić terminal w VSCode za pomocą View: Toggle Integrated Terminalpolecenia i uruchomić z niego polecenie.

Więcej informacji na temat zarządzania oddziałami można znaleźć w dokumentacji git - https://git-scm.com/book/be/v2/Git-Branching-Branch-Management

Krzysztof Cieślak
źródło
Hej dzięki. Tak, obecnie używam poleceń git ... ale miałem nadzieję, że vscode git sync wykryje, że pilot je usunął - lub podświetli je. Chyba nie :-)
Drenai
Całkiem głupi, że nie obsługują natywnych poleceń git w swoim wierszu poleceń git. Źle zaprojektowane.
Steven
też czekam na rozszerzenie tutaj :)
Marko
1
Zobacz powyższą odpowiedź od @ matthew-disney-cook
Orangutech
15

Otwórz paletę poleceń (Ctrl + Shift + P) i wybierz Git: Fetch (Prune) .

Ta funkcja została włączona do VS Code 20 listopada 2018 r.

tgr42
źródło
1
czy istnieje sposób, aby ustawić to domyślne zachowanie git pull w vscode?
Tuncay Göncüoğlu,
9

Zinterpretowałem to pytanie tak: jak mogę usunąć moje lokalne gałęzie, które zostały scalone, skoro używam Git Fetch (Prune) z palety poleceń. Można to uznać za „włamanie”, ale ja tego używam. W terminalu PowerShell:

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

Jeśli nie jesteś zaznajomiony z PoSH, oto co to robi: pierwsza linia pobiera nazwy wszystkich połączonych gałęzi (z wyjątkiem develop i master), a druga linia przechodzi przez tę listę i uruchamia "git branch -d ”. Dopóki gałąź jest całkowicie scalona, ​​powinieneś zobaczyć:

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

dla każdego oddziału. Czasami napotykam gałąź, której nie można usunąć - jeśli tak się stanie i masz pewność, że można ją bezpiecznie usunąć (tj. Nie stracisz lokalnej pracy, która nie została zapisana), możesz uruchomić:

git branch <branch name> -D

Zwróć uwagę na duże D - to wymusza usunięcie lokalnego oddziału.

Darren G
źródło
To jedna szalona komenda PowerShell Muszę wyrazić uznanie za odwagę za uruchomienie tego na twoim repozytorium
Drenai
2
Istnieje cienka granica między geniuszem a szaleństwem. To jest daleko od tej linii, po stronie szaleństwa.
Darren G
1
Nie, nie jest. Nie jest to takie skomplikowane, jeśli spojrzysz na to, a poza tym to tylko tłumaczenie PowerShell odpowiedzi stąd: stackoverflow.com/questions/6127328/ ...
Scott Stafford
@ScottStafford Dla mnie komenda 170 znaków do oddziałów kasowania jest na kompleksowej stronie simple | complexdivide😉
Drenajów
6

Wszystko, co musisz zrobić, to uruchomić to polecenie:

git remote prune origin

Coś dodatkowego, co możesz zrobić, ponieważ czasami denerwuje się otwieranie terminala tylko w tym celu ... możesz dodać zadanie w vscode.

Aby to zrobić, wykonaj następujące kroki:

  1. W widoku VSCode > Paleta poleceń (cmd / ctrl + Shift + P)
  2. wpisz Konfiguruj zadanie
  3. Wybierz opcję Utwórz plik tasks.json z szablonu, a nowy plik zostanie utworzony w folderze .vscode .
  4. Wewnątrz tablicy zadań dodaj to:

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

Jak tego użyć:

  1. Otwórz paletę poleceń
  2. Wpisz Uruchom zadanie i wybierz je
  3. Wybierz opcję Git Prune

Odniesienie:

  1. Git prune
Bogdan Alexandru Militaru
źródło
Czy wiesz, czy git remote prune originróżni się od zaakceptowanej odpowiedzi git fetch --prune? Szczegóły zadania Run są świetne, dziękujemy za opublikowanie
Drenai,
@Drenai Nie, są takie same. Ale dla pełnej odpowiedzi spójrz tutaj
Bogdan Alexandru Militaru
5

Możesz usunąć wszystkie lokalne oddziały (poza głównym) za pomocą:

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

Możesz usunąć wszystkie gałęzie, które nadal pojawiają się jak origin/XXXXw VSCode, ale zostały już usunięte za originpomocą:

git fetch --prune

Uwaga:

Pierwsze polecenie powyżej (pobrane z https://stackoverflow.com/a/52006270/3120163 ):

  • wypisz wszystkie gałęzie
  • usuń gałąź główną z listy
  • usuń gałęzie z listy
Adrien Renaud
źródło
Byłoby wspaniale, gdyby można dodać wyjaśnienie tej pierwszej komendy - to bardzo przydatny 👍
Drenajów
2
Dodałem wyjaśnienie @Drenai
Adrien Renaud
4

Znalazłem sposób, aby to naprawić. Musisz więc usunąć pilota, który łączy się z repozytorium Github, a następnie ponownie dodać pilota.

Wszystkie gałęzie usunięte z Github nie będą już wyświetlane w vscode. Zakładając, że originjest to nazwa zdalnego repozytorium.

git remote remove origin

Następnie

git remote add origin [email protected]:your-username/repo-name.git
davidhu
źródło
1
nie żebym o tym wiedział. To jedyny sposób, jaki znalazłem, aby usunąć zdalne gałęzie, które już nie istnieją.
davidhu
3

Krótsze polecenie to:

git fetch -p
Al Gol
źródło