Większość odpowiedzi tutaj zbytnio komplikuje analizowanie danych wyjściowych git branch -r
. Możesz użyć następującej for
pętli, aby utworzyć gałęzie śledzenia dla wszystkich gałęzi na pilocie, w ten sposób.
Przykład
Powiedzmy, że mam te zdalne oddziały.
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
Potwierdź, że nie śledzimy już lokalnie niczego poza głównym:
$ git branch -l # or using just git branch
* master
Możesz użyć tego jednego linera do tworzenia gałęzi śledzenia:
$ for i in $(git branch -r | grep -vE "HEAD|master"); do
git branch --track ${i#*/} $i; done
Branch development set up to track remote branch development from origin.
Branch integration set up to track remote branch integration from origin.
Branch production set up to track remote branch production from origin.
Branch staging set up to track remote branch staging from origin.
Teraz potwierdź:
$ git branch
development
integration
* master
production
staging
Aby je usunąć:
$ git br -D production development integration staging
Deleted branch production (was xxxxx).
Deleted branch development (was xxxxx).
Deleted branch integration (was xxxxx).
Deleted branch staging (was xxxxx).
Jeśli użyjesz -vv
przełącznika do git branch
, możesz potwierdzić:
$ git br -vv
development xxxxx [origin/development] commit log msg ....
integration xxxxx [origin/integration] commit log msg ....
* master xxxxx [origin/master] commit log msg ....
production xxxxx [origin/production] commit log msg ....
staging xxxxx [origin/staging] commit log msg ....
Podział pętli for
Pętla w zasadzie wywołuje polecenie git branch -r
, odfiltrowując z wyjścia wszelkie gałęzie HEAD lub master, używając grep -vE "HEAD|master"
. Aby uzyskać nazwy tylko gałęzi bez origin/
podłańcucha, używamy operacji na łańcuchach Basha ${var#stringtoremove}
. Spowoduje to usunięcie ze zmiennej napisu „stringtoremove” $var
. W naszym przypadku usuwamy ciąg origin/
ze zmiennej $i
.
UWAGA: Alternatywnie możesz również git checkout --track ...
to zrobić:
$ for i in $(git branch -r | grep -vE "HEAD|master" | sed 's/^[ ]\+//'); do
git checkout --track $i; done
Ale nie obchodzi mnie ta metoda, ponieważ przełącza cię między gałęziami, gdy wykonuje kasę. Po zakończeniu pozostawi cię na ostatniej utworzonej gałęzi.
Bibliografia
git checkout --track origin/branchname