Ze strony podręcznika:
Deletes all stale tracking branches under <name>. These stale branches have already been removed from the remote repository referenced by <name>, but are still locally available in "remotes/<name>".
Więc usunąłem kilka gałęzi za pomocą
git push origin :staleStuff
a potem pobiegł
git remote prune origin
Jednak tylko jedna lokalna gałąź została przycięta. Niektóre z tych oddziałów zostały stworzone przeze mnie, inne przez współpracowników. Czy to przede wszystkim oznacza, że nie śledziłem poprawnie tych gałęzi?
git
version-control
branch
git-branch
git-remote
Felixyz
źródło
źródło
git remote show origin
i poszukać wszystkich zaznaczonych gałęzistale
Odpowiedzi:
Kiedy używasz
git push origin :staleStuff
, usuwa się automatycznieorigin/staleStuff
, więc kiedy biegałeśgit remote prune origin
, przycinałeś jakąś gałąź, która została usunięta przez kogoś innego. Bardziej prawdopodobne jest, że Twoi współpracownicy muszą teraz biec,git prune
aby pozbyć się usuniętych gałęzi.Więc co dokładnie
git remote prune
robi? Główny pomysł: lokalne oddziały (nie śledzące gałęzi) nie są dotykane przezgit remote prune
polecenie i powinny być usuwane ręcznie.A teraz prawdziwy przykład dla lepszego zrozumienia:
Masz zdalne repozytorium z 2 gałęziami:
master
ifeature
. Załóżmy, że pracujesz na obu gałęziach, więc w rezultacie masz te odniesienia w swoim lokalnym repozytorium (podane są pełne nazwy referencyjne, aby uniknąć nieporozumień):refs/heads/master
(krótka nazwamaster
)refs/heads/feature
(krótka nazwafeature
)refs/remotes/origin/master
(krótka nazwaorigin/master
)refs/remotes/origin/feature
(krótka nazwaorigin/feature
)Teraz typowy scenariusz:
feature
, scala gomaster
i usuwafeature
gałąź ze zdalnego repozytorium.git fetch
(lubgit pull
), żadne odniesienia nie są usuwane z lokalnego repozytorium, więc nadal masz wszystkie te 4 odniesienia.git remote prune origin
.feature
gałąź już nie istnieje, więcrefs/remotes/origin/feature
jest to nieaktualna gałąź, którą należy usunąć.refs/heads/feature
, ponieważgit remote prune
nie usuwa żadnychrefs/heads/*
odniesień.Możliwe jest zidentyfikowanie oddziałów lokalnych, powiązanych ze zdalnymi oddziałami śledzenia, poprzez
branch.<branch_name>.merge
parametr konfiguracyjny. Ten parametr nie jest naprawdę wymagany, aby cokolwiek działało (prawdopodobnie z wyjątkiemgit pull
), więc może go brakować.(zaktualizowane przykładami i przydatnymi informacjami z komentarzy)
źródło
git prune
./refs/remotes/<remote_name>/
Przycinaniu podlegają tylko gałęzie w kraju ; żadne gałęzie/refs/heads/
nie zostaną dotknięte - musisz nimi ręcznie zarządzać.branch.<branch_name>.merge
parametru config.