He clonado un repositorio Git, que contiene unas cinco ramas. Sin embargo, cuando hago git branch
sólo veo una de ellas:
$ git branch
* master
Sé que puedo hacer git branch -a
para ver todas las ramas, pero ¿cómo puedo sacar todas las ramas localmente para que cuando haga git branch
me muestre lo siguiente?
$ git branch
* master
* staging
* etc...
Puedes obtener todas las ramas de todas las remotas así:
git fetch --all
Es básicamente un movimiento de poder.
fetch
actualiza las copias locales de las ramas remotas por lo que siempre es seguro para sus ramas locales PERO:
fetch
no actualiza las ramas locales (que siguen la pista de las ramas remotas); si quieres actualizar tus ramas locales todavía tienes que tirar de cada rama.
fetch
no creará ramas locales (que rastrean ramas remotas), tienes que hacerlo manualmente. Si quieres listar todas las ramas remotas:
git branch -a
Para actualizar las ramas locales que siguen las ramas remotas:
git pull --all
Sin embargo, esto puede ser todavía insuficiente. Sólo funcionará para las ramas locales que siguen las ramas remotas. Para rastrear todas las ramas remotas ejecutar este oneliner Antes 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
(Parece que el pull recupera todas las ramas de todas las remotas, pero yo siempre recupero primero para estar seguro).
Ejecute el primer comando sólo si hay ramas remotas en el servidor que no son rastreadas por sus ramas locales.
P.D. AFAIK git fetch --all
y git remote update
son equivalentes.
Kamil Szot's comentario, que la gente ha encontrado útil.
Tuve que usar:
for remote in
git branch -r
; do git branch --track ${remote#origin/} $remote; doneporque tu código creaba ramas locales llamadas
origin/branchname
y Estaba recibiendo "refname 'origen/branchname' es ambiguo cada vez que se refería a ella.
$ git remote update
$ git pull --all
Esto supone que todas las ramas son rastreadas.
Si no lo están puedes disparar esto en Bash:
for remote in `git branch -r `; do git branch --track $remote; done
Luego ejecuta el comando