Ten problem nie został (jeszcze) rozwiązany, przynajmniej nie łatwo / bez skryptów: zobacz ten post na liście mailowej git autorstwa Junio C. Hamano, wyjaśniając sytuację i podając wezwanie do prostego rozwiązania.
Głównym powodem jest to, że nie powinieneś tego potrzebować:
W przypadku git, który nie jest starożytny (tj. Wersja 1.5.0 lub nowsza), nie ma powodu, aby mieć lokalnego „dev”, który już tylko śledziłby zdalnie. Jeśli chcesz tylko spojrzeć i zobaczyć, możesz sprawdzić gałąź zdalnego śledzenia bezpośrednio na odłączonym HEAD za pomocą „ git checkout origin/dev”.
Co oznacza, że jedynymi przypadkami, które musimy uczynić wygodnymi dla użytkowników, są te lokalne oddziały, które „śledzą” zdalne, gdy wprowadzasz lokalne zmiany lub planujesz je wprowadzić.
Jeśli masz lokalne zmiany w „dev”, które są zaznaczone, aby śledzić usunięcie „dev”, a jeśli jesteś w gałęzi innej niż „dev”, to nie powinniśmy nic robić po „ git fetch” aktualizacji zdalnego śledzenia „dev” . I tak nie będzie szybko przewijać do przodu
Zaproszenie do rozwiązania polegało na wybraniu opcji lub zewnętrznego skryptu do przycinania lokalnych oddziałów, które następują teraz po oddziałach zdalnego śledzenia, zamiast utrzymywania ich na bieżąco poprzez szybkie przekazywanie, tak jak zażądano oryginalnego plakatu.
A co powiesz na „ git branch --prune --remote=<upstream>”, które iteruje lokalne oddziały, a jeśli tak
(1) nie jest to obecny oddział; i
(2) jest zaznaczony do śledzenia gałęzi pobranej z <upstream>; oraz
(3) nie ma żadnych zobowiązań;
następnie usunąć tę gałąź? „ git remote --prune-local-forks <upstream>” też jest w porządku; Nie dbam o to, które polecenie tak bardzo implementuje tę funkcję.
Uwaga: od wersji 2.10 takiego rozwiązania nie ma. Zauważ, żegit remote prunepodkomendagit fetch --prunedotyczy usuwania gałęzi zdalnego śledzenia dla gałęzi, która już nie istnieje na pilocie, a nie usuwania lokalnej gałęzi, która śledzi gałąź zdalnego śledzenia (dla której gałąź zdalnego śledzenia jest odgałęzieniem powyżej).