La mayoría de las respuestas aquí complican demasiado el análisis de la salida de git branch -r
. Puede usar el siguiente for
bucle para crear las ramas de seguimiento en todas las ramas del control remoto de esta manera.
Ejemplo
Digamos que tengo estas ramas remotas.
$ git branch -r
origin/HEAD -> origin/master
origin/development
origin/integration
origin/master
origin/production
origin/staging
Confirme que no estamos rastreando nada más que maestro, localmente:
$ git branch -l # or using just git branch
* master
Puede usar este único revestimiento para crear las ramas de seguimiento:
$ 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.
Ahora confirme:
$ git branch
development
integration
* master
production
staging
Para eliminarlos:
$ 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).
Si utiliza el -vv
interruptor a git branch
puede confirmar:
$ 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 ....
Desglose de for loop
El ciclo básicamente llama al comando git branch -r
, filtrando cualquier rama HEAD o maestra en la salida usando grep -vE "HEAD|master"
. Para obtener los nombres de solo las ramas menos la origin/
subcadena, usamos la manipulación de cadenas de Bash ${var#stringtoremove}
. Esto eliminará la cadena, "stringtoremove" de la variable $var
. En nuestro caso, estamos eliminando la cadena origin/
de la variable $i
.
NOTA: Alternativamente, puede usar git checkout --track ...
para hacer esto también:
$ for i in $(git branch -r | grep -vE "HEAD|master" | sed 's/^[ ]\+//'); do
git checkout --track $i; done
Pero no me importa particularmente este método, ya que lo está cambiando entre las ramas ya que realiza un pago. Cuando termine, te dejará en la última rama que creó.
Referencias
git checkout --track origin/branchname