Wśród informacji przedstawionych przez git help fetch, jest ten mały przedmiot:
-p, --prune
After fetching, remove any remote-tracking branches which no longer exist on the remote.
Więc może git fetch -pjest to, czego szukasz?
EDYCJA: Ok, dla tych, którzy wciąż debatują nad odpowiedzią 3 lata po fakcie, oto trochę więcej informacji na temat tego, dlaczego przedstawiłem tę odpowiedź ...
Po pierwsze, OP mówi, że chcą „usunąć również te lokalne gałęzie, które zostały utworzone z tych zdalnych gałęzi [których już nie ma na zdalnym]”. Nie jest to jednoznacznie możliwe w git. Oto przykład.
Powiedzmy, że mam repozytorium na centralnym serwerze i ma on dwie gałęzie, zwane Ai B. Jeśli sklonuję to repozytorium do mojego lokalnego systemu, mój klon będzie miał lokalne odwołania (jeszcze nie rzeczywiste gałęzie) origin/Ai origin/B. Powiedzmy teraz, że wykonuję następujące czynności:
git checkout -b A origin/A
git checkout -b Z origin/B
git checkout -b C <some hash>
Istotne fakty tutaj są takie, że z jakiegoś powodu postanowiłem utworzyć oddział w moim lokalnym repozytorium, który ma inną nazwę niż jego pochodzenie, a także mam oddział lokalny, który (jeszcze) nie istnieje w repozytorium źródłowym.
Powiedzmy teraz, że usuwam zarówno gałęzie, jak Ai Bzdalne repozytorium i aktualizuję moje lokalne repozytorium ( git fetchjakiejś formy), co powoduje, że moje lokalne odwołania origin/Ai origin/Bznikają. Teraz mój lokalny repo ma trzy oddziały nadal, A, Z, i C. Żadne z nich nie ma odpowiedniej gałęzi na zdalnym repozytorium. Dwa z nich zostały „utworzone z… odległych gałęzi”, ale nawet jeśli wiem, że kiedyś istniała gałąź wywoływana Bna początku, nie mam sposobu, aby wiedzieć, że Zzostała utworzona zB, ponieważ został przemianowany w tym procesie, prawdopodobnie z ważnego powodu. Tak naprawdę, bez pewnych zewnętrznych metadanych pochodzenia procesu rejestrowania gałęzi lub człowieka znającego historię, nie można stwierdzić, która z trzech gałęzi, jeśli w ogóle, OP stara się usunąć. Bez pewnych informacji zewnętrznych, które gitnie są automatycznie utrzymywane dla ciebie, git fetch -pjest tak blisko, jak to tylko możliwe, a każda automatyczna metoda dosłownej próby tego, o co poprosił PO, ryzykuje albo usunięcie zbyt wielu gałęzi, albo pominięcie niektórych, które w przeciwnym razie PO chcesz usunąć.
Istnieją również inne scenariusze, na przykład gdy utworzę trzy oddzielne gałęzie, origin/Aaby przetestować trzy różne podejścia do czegoś, a następnie origin/Aznikną. Teraz mam trzy gałęzie, które oczywiście nie wszystkie pasują do nazwy, ale zostały utworzone origin/A, więc dosłowna interpretacja pytania PO wymagałaby usunięcia wszystkich trzech. Może to jednak nie być pożądane, jeśli możesz nawet znaleźć niezawodny sposób na ich dopasowanie ...