Sklonowałem repozytorium Git, które zawiera około pięciu gałęzi. Jednakże, kiedy robię git branch
widzę tylko jedną z nich:
$ git branch
* master
Wiem, że mogę zrobić git branch -a
, aby zobaczyć wszystkie gałęzie, ale jak mógłbym wyciągnąć wszystkie gałęzie lokalnie, więc kiedy robię git branch
, pokazuje to, co następuje?
$ git branch
* master
* staging
* etc...
Możesz pobrać wszystkie gałęzie z wszystkich pilotów w ten sposób:
git fetch --all
Jest to w zasadzie power move.
fetch
aktualizuje lokalne kopie zdalnych oddziałów, więc jest to zawsze bezpieczne dla twoich lokalnych oddziałów ALE:
fetch
nie będzie aktualizował lokalnych gałęzi (które śledzą zdalne gałęzie); jeśli chcesz zaktualizować swoje lokalne gałęzie, nadal musisz wyciągnąć każdą gałąź.
fetch
nie będzie tworzył lokalnych gałęzi (które śledzą zdalne gałęzie), musisz to zrobić ręcznie. Jeśli chcesz wyświetlić listę wszystkich zdalnych gałęzi:
git branch -a
.
Aby uaktualnić lokalne gałęzie, które śledzą zdalne gałęzie:
git pull --all
Jednak może to być wciąż niewystarczające. Będzie działać tylko dla twoich lokalnych gałęzi, które śledzą zdalne gałęzie. Aby śledzić wszystkie zdalne gałęzie wykonaj ten oneliner Przed git pull --all
:
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
(Wygląda na to, że pull pobiera wszystkie gałęzie ze wszystkich remotów, ale ja zawsze pobieram najpierw, żeby się upewnić).
Uruchom pierwsze polecenie tylko wtedy, gdy na serwerze znajdują się zdalne gałęzie, które nie są śledzone przez twoje lokalne gałęzie.
P.S. AFAIK git fetch --all
i git remote update
są równoważne.
Kamil Szot's komentarz, który ludzie uznali za przydatny.
Musiałem użyć:
for remote in
git branch -r
; do git branch --track ${remote#origin/} $remote; doneponieważ twój kod utworzył lokalne gałęzie o nazwach
origin/branchname
i Dostawałem "refname 'origin/branchname' jest niejednoznaczny za każdym razem, gdy się do niego odwoływałem. odwoływałem się do niego.
$ git remote update
$ git pull --all
Zakłada to, że wszystkie gałęzie są śledzone.
Jeśli nie są'możesz odpalić to w Bashu:
for remote in `git branch -r `; do git branch --track $remote; done
Następnie uruchom polecenie.