Git: aktualizowanie informacji o zdalnym oddziale

125

W repozytorium git usunięto zdalną gałąź, której nie śledzę. Kiedy piszę

git branch -r

usunięta gałąź nadal się pojawia (i mogę to sprawdzić)

Jakie polecenie git muszę uruchomić, aby zaktualizować te informacje?

Bain Markev
źródło

Odpowiedzi:

39

Jeśli wykonasz coś takiego jak

git branch -d -r remote_name/branch_name

usuwasz tylko lokalną kasę. To polecenie nie robi nic ze zdalnym repozytorium, dlatego nadal się pojawia.

Rozwiązanie:

git push origin :branch_name

usunie zdalną gałąź (zwróć uwagę na „:”) i

git branch -d branch_name

usunie Twoją lokalną kasę.

( Odniesienie )

Garrett Hyde
źródło
146
Możesz także uruchomić polecenie „git remote prune origin”, aby wyczyścić zdalne odwołania.
cmcginty
3
Spowoduje to usunięcie wszystkich gałęzi, które nie są już śledzone przez zdalne repozytorium. Więc bądź ostrożny.
Garrett Hyde
4
Myślę, że warto również wiedzieć, że chociaż jest to trochę bardziej szczegółowe, możesz również użyć git push <remote> --delete <branchname>do usuwania zdalnych gałęzi.
AeroCross
Zwykle to działa, ale dzisiaj natrafiłem na sytuację, w której zdalna lista nie została zaktualizowana, więc próbowałem usunąć gałąź, której tam nie było. Zatem rozwiązanie @Flo jest poniżej było konieczne wcześniej.
dgo
284

Jeśli były to gałęzie w zdalnym repozytorium, które zostały usunięte i chcesz zaktualizować wszystkie lokalne gałęzie zdalnego śledzenia naraz, możesz użyć

$ git remote prune <remotename>

aby usunąć wszystkie przestarzałe gałęzie zdalnego śledzenia dla danego zdalnego (tj. te, które następują po gałęziach, które zostały usunięte w zdalnym repozytorium).

Zobacz git remotedokumentację.

Jakub Narębski
źródło
Dziękuję @Casey i @Jakub za odpowiedzi! Jak to się dzieje, że informacje o zdalnym oddziale przechowywane lokalnie nie są aktualizowane przy następnym użyciu git fetch?
JJD,
4
@JJD: Ponieważ mogłeś oprzeć swoją pracę na zdalnym oddziale, którego już nie ma. Zniknięcie bez żądania było zatem uważane za zły pomysł. Dlatego musisz wyraźnie przyciąć gałęzie zdalnego śledzenia.
Jakub Narębski
Czy „git gc” czyści również przestarzałe zdalne gałęzie?
James Wald
@JamesWald: Nie, tak nie jest. git gcpo prostu pakuje obiekty i odniesienia i usuwa obiekty, do których nie ma odniesień (z pewnym marginesem bezpieczeństwa).
Jakub Narębski
186
git remote update --prune

Należy odświeżyć wszystkie gałęzie pilotów, dodawać nowe i usuwać usunięte.

Edycja: Polecenie zdalnej aktualizacji zasadniczo pobiera listę gałęzi na pilocie. Ta --pruneopcja usunie lokalne zdalne gałęzie śledzenia, które wskazują gałęzie, które już nie istnieją na zdalnym .

Flo
źródło
To zadziałało dla mnie. Musiałem usunąć zdalną gałąź, która z jakiegoś powodu nie mogła zostać usunięta przez zwykłe `` źródło git push: <branch_name> ''
n0denine
Czy słuszne byłoby stwierdzenie, że ta odpowiedź działa tak jak odpowiedź Jakuba Narębskiego, a nawet więcej? Oznacza to, że przycina się i pobiera aktualizacje?
Frank Tan
14

Przydatne również do przeglądania nowych zdalnych oddziałów:

git fetch --all
Aidan Donohoe
źródło
To mi bardzo pomogło. Pewien błąd w programie Visual Studio git uniemożliwia wyświetlanie nowych gałęzi utworzonych po klonowaniu. To polecenie pomaga pokazać nowe gałęzie
Venkatesh Muniyandi
nice n simple thx stary, miej brązową odznakę odpowiedzi na dom :)
danday74
2

Możesz połączyć flagi -ri, -daby usunąć zdalne gałęzie.

mikerobi
źródło
świetna wskazówka! jednak w tym przypadku jest kilka gałęzi, które zostały już usunięte, na pewno jest polecenie pobrania tych aktualizacji
Bain Markev
2

Spróbuj tego polecenia

git gc --prune=now
MarceloCouto
źródło