Kiedy to zrobię git fetch origin
i origin ma usuniętą gałąź, wydaje się, że nie aktualizuje jej w moim repozytorium. Kiedy to robię git branch -r
, nadal pokazuje origin/DELETED_BRANCH
.
Jak mogę to naprawić?
Kiedy to zrobię git fetch origin
i origin ma usuniętą gałąź, wydaje się, że nie aktualizuje jej w moim repozytorium. Kiedy to robię git branch -r
, nadal pokazuje origin/DELETED_BRANCH
.
Jak mogę to naprawić?
Odpowiedzi:
Musisz wykonać następujące czynności
git fetch -p
Spowoduje to zaktualizowanie lokalnej bazy danych zdalnych oddziałów.
origin
rozwidleniu: git fetch -p origin
Kiedy to zrobiłem, git branch -r
nieistniejąca zdalna gałąź już się nie pojawiła.
git remote prune origin
i podobny jak git pull --prune
wspomniano odpowiednio na stackoverflow.com/a/6127884/94687 i stackoverflow.com/a/17983126/94687 .
[deleted] (none) -> origin/ < branch name >
a gałąź nadal jest wyświetlana w lokalnym repozytorium, jakiś pomysł, dlaczego?
git branch
nadal pokazuje gałęzie, które rzekomo zostały usunięte.
Od http://www.gitguys.com/topics/adding-and-removing-remote-branches/
Gdy ktoś usunie gałąź ze zdalnego repozytorium, git nie usunie automatycznie gałęzi lokalnego repozytorium, gdy użytkownik pobierze git lub pobierze git. Jeśli jednak użytkownik chce usunąć wszystkie gałęzie śledzenia ze swojego lokalnego repozytorium, które zostały usunięte w repozytorium zdalnym, może wpisać:
git zdalne pochodzenie śliwek
Uwaga: parametr -p z git fetch -p
faktycznie oznacza „przycinać”.
Niezależnie od wybranego sposobu nieistniejące zdalne gałęzie zostaną usunięte z lokalnego repozytorium.
Musisz wykonać następujące czynności
git fetch -p
w celu zsynchronizowania listy oddziałów. Podręcznik git mówi
-p
,--prune
Po pobraniu usuń wszelkie odniesienia do zdalnego śledzenia, które już nie istnieją na pilocie. Znaczniki nie podlegają przycinaniu, jeśli są pobierane tylko z powodu domyślnego automatycznego śledzenia znacznika lub--tags
opcji. Jeśli jednak tagi są pobierane z powodu jawnego refspec (w wierszu polecenia lub w konfiguracji zdalnej, na przykład jeśli pilot został sklonowany z tą--mirror
opcją), to również podlegają przycinaniu.
Osobiście lubię używać, git fetch origin -p --progress
ponieważ pokazuje wskaźnik postępu.
Jeśli chodzi o git fetch -p
, jego zachowanie zmieniło się w Git 1.9 i tylko Git 2.9.x / 2.10 odzwierciedla to.
Zobacz zatwierdzenie 9e70233 (13 czerwca 2016 r.) Autor: Jeff King ( peff
) .
(Połączone przez Junio C Hamano - gitster
- w commit 1c22105 , 06 lipca 2016)
fetch
: dokument, że przycinanie odbywa się przed pobraniemZostało to zmienione w 10a6cc8 (
fetch --prune
: Uruchom śliwkę przed pobraniem, 02.02.2014), ale wygląda na to, że nikt w tej dyskusji nie zdawał sobie sprawy, że wyraźnie reklamujemy „po”.
Dokumentacja mówi teraz:
Przed pobraniem usuń odniesienia do zdalnego śledzenia, które już nie istnieją na pilocie
Tak jest ponieważ:
Gdy mamy gałąź zdalnego śledzenia o nazwie „
frotz/nitfol
” z poprzedniego pobierania, a nadrzędny teraz ma gałąź o nazwie „frotz
”, pobieranie nie może usunąć „frotz/nitfol
” z „git fetch --prune
” z nadrzędnego. git poinformuje użytkownika, aby użył „git remote prune
” do rozwiązania problemu.Zmień sposób działania „
fetch --prune
”, przenosząc operację przycinania przed operacją pobierania. W ten sposób, zamiast ostrzegać użytkownika o konflikcie, automatycznie go naprawia.