Большинство ответов здесь слишком усложняют синтаксический анализ вывода git branch -r
. Вы можете использовать следующий цикл for
для создания ветвей отслеживания для всех ветвей на пульте дистанционного управления, например.
Пример
Скажем, у меня есть эти удаленные ветки.
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
Подтвердите, что мы уже не отслеживаем ничего, кроме master, локально:
$ 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 ....
Разбивка цикла for
Цикл в основном вызывает команду git branch -r
, отфильтровывая любые ветки HEAD или master в выводе с помощью grep -vE "HEAD|master"
. Чтобы получить имена только ветвей без подстроки origin/
, мы используем манипуляции со строками ${var#stringtoremove}
в Bash. Это удалит строку "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
Но меня не особо интересует этот метод, поскольку он переключает вас между ветвями при выполнении проверки. Когда это будет сделано, вы перейдете к последней созданной ветке.
использованная литература
person
slm
schedule
01.12.2014
git checkout --track origin/branchname
- person Cerran   schedule 05.03.2014git pull origin
и нажмитеtab
, чтобы получить список удаленных ветвей. Затем продолжайте вводить и нажмитеreturn
. - person Max Heiber   schedule 09.11.2016