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?

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 )


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ę.


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 .


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

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.


ś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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.