Большинство ответов здесь чрезмерно усложняют анализ выходных данных git branch -r
. Вы можете использовать следующий for
цикл, чтобы создать ветви отслеживания для всех веток на пульте, как показано ниже.
пример
Скажем, у меня есть эти удаленные ветви.
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
Убедитесь, что мы не отслеживаем ничего, кроме мастера, локально:
$ git branch -l # or using just git branch
* master
Вы можете использовать этот вкладыш для создания веток отслеживания:
$ 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.
Теперь подтвердите:
$ git branch
development
integration
* master
production
staging
Чтобы удалить их:
$ 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).
Если вы используете -vv
переключатель, git branch
вы можете подтвердить:
$ 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 ....
Разбивка цикла
Цикл в основном вызывает команду git branch -r
, отфильтровывая любые HEAD или главные ветви в выводе, используя grep -vE "HEAD|master"
. Чтобы получить имена только ветвей минус origin/
подстрока, мы используем манипулирование строк Bash ${var#stringtoremove}
. Это удалит строку «stringtoremove» из переменной $var
. В нашем случае мы удаляем строку origin/
из переменной $i
.
ПРИМЕЧАНИЕ. В качестве альтернативы вы также можете использовать git checkout --track ...
это:
$ for i in $(git branch -r | grep -vE "HEAD|master" | sed 's/^[ ]\+//'); do
git checkout --track $i; done
Но мне не особенно важен этот метод, так как он переключает вас между ветвями, когда он выполняет проверку. Когда это будет сделано, вы останетесь на последней ветви, которую создали.
Ссылки
git checkout --track origin/branchname