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?


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ń


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.


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


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


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.


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

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

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 git@github.com:your-username/repo-name.git

1
nie żebym o tym wiedział. To jedyny sposób, jaki znalazłem, aby usunąć zdalne gałęzie, które już nie istnieją.
— davidhu

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.