Jak usunąć usunięte nazwy gałęzi z autouzupełniania?

120

Kiedyś git branch -d myBranchusuwałem oddział. Jednak kiedy jestem na master i próbuję wyewidencjonować nową gałąź z git checkout, myBranchnadal pojawia się w autouzupełnianiu kart.

Jak usunąć nazwę myBranchz autouzupełniania kart git checkout?

John Hoffman
źródło
10
Czy git branch -anadal lista albo myBranchalbo origin/myBranch? Zauważ, że nawet jeśli myBranchnie istnieje, git checkout myBranchnadal jest poprawnym skrótem do git checkout -b myBranch origin/myBranchif origin/myBranchistnieje.
twalberg
2
@twalberg warto zamieścić jako odpowiedź.
cmbuckley

Odpowiedzi:

81

Jednym z możliwych powodów jest to, że jeśli zdalna gałąź (np. origin/myBranch) Nadal istnieje, to git checkout myBranchodniesie sukces jako alternatywa dla git checkout -b myBranch origin/myBranch. Ma to na celu wygodę w typowym przypadku wyewidencjonowania zdalnego oddziału po raz pierwszy, tworząc lokalną gałąź śledzenia o identycznej nazwie.

Są też inne możliwości, w zależności od tego, czego dokładnie używasz do wykonania, ale to jedna z pierwszych rzeczy, które sprawdzę. Jeśli biegasz git branch -ai jest na origin/myBranchliście (lub jeden dla pilota innego niż origin, jeśli taki masz), to jest to prawdopodobnie winowajca.

twalberg
źródło
2
Dzięki! To wydaje się być winowajcą. origin/myBranchwciąż istnieje. Jeśli usunąłem myBranchoddział na Github (przez interfejs online), czy mogę bezpiecznie zadzwonić w git branch -d origin/myBranchcelu usunięcia tego zdalnego oddziału?
John Hoffman
99
@JohnHoffman To powinno być bezpieczne, ale myślę, że byłoby lepiej git fetch --prune origin. Spowoduje to wyczyszczenie wszystkich lokalnych gałęzi śledzenia, które już nie istnieją na pilocie.
twalberg
3
@twalberg Nie wierzę, że po prostu usunięcie lokalnej i zdalnej gałęzi wystarczy, aby pozbyć się wszystkich starych gałęzi w autouzupełnianiu. Uważam, że musisz, aby git fetch --prune originlokalne odniesienia do zdalnych oddziałów zniknęły w autouzupełnianiu. Dobrze byłoby przenieść to z komentarza do odpowiedzi. W każdym razie dziękuję za twoją odpowiedź, ponieważ pomogła mi!
timmyl
4
git branch -azaprowadził mnie na właściwą drogę; mój współpracownik zasugerował, git fetch --prune --allaby przyciąć wszystkie martwe gałęzie ze wszystkich pilotów, co jest przydatne podczas pracy z wieloma programistami z dużą ilością widelców.
ericsoco
173

git fetch --prune --all

Publikując to jako własną odpowiedź, ponieważ jest to poprawka w jednym wierszu, ale jeśli zagłosujesz, pamiętaj, aby zagłosować na powyższą odpowiedź @ twalberg.

sugestia @ twalberga, aby git branch -apoprowadzić mnie na właściwą drogę; mój współpracownik zasugerował, git fetch --prune --allaby przyciąć wszystkie martwe gałęzie ze wszystkich pilotów, co jest przydatne podczas pracy z wieloma programistami z dużą ilością widelców.

ericsoco
źródło
19
Chociaż zaakceptowana odpowiedź daje dobre wyjaśnienie, dlaczego tak się dzieje, ta odpowiedź przedstawia rzeczywiste rozwiązanie problemu i dlatego powinna zostać zaakceptowana przez IMHO.
Patrick Oscity
3
nazwy martwych gałęzi nadal są wyświetlane w autouzupełnianiu.
Fitsyu