`git fetch` una rama remota
El repositorio remoto contiene varias ramas como origin/daves_branch
:
$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/master
¿Cómo cambio daves_branch
al repositorio local para que realice un seguimiento origin/daves_branch
?
Lo intenté:
$ git fetch origin daves_branch
$ git checkout daves_branch
Actualización: uso de Git Switch
Toda la información escrita a continuación era precisa, pero git switch
se agregó un nuevo comando que simplifica el esfuerzo.
Si daves_branch
existe en el repositorio remoto, pero no en su sucursal local, simplemente puede escribir:
git switch daves_branch
Como no tiene la sucursal localmente, esto buscará automáticamente switch
en el repositorio remoto. Luego también configurará automáticamente el seguimiento remoto de sucursales.
Tenga en cuenta que si daves_branch
no existe localmente, deberá hacerlo git fetch
primero antes de usarlo switch
.
Publicación original
Debe crear una sucursal local que rastree una sucursal remota. El siguiente comando creará una rama local llamada daves_branch , rastreando la rama remota origin/daves_branch . Cuando envíe sus cambios, la rama remota se actualizará.
Para las versiones más recientes de Git:
git checkout --track origin/daves_branch
--track
es una abreviatura de git checkout -b [branch] [remotename]/[branch]
donde [nombre remoto] es origen en este caso y [sucursal] es dos veces igual, daves_branch en este caso.
Para Git 1.5.6.5 necesitabas esto:
git checkout --track -b daves_branch origin/daves_branch
Para Git 1.7.2.3 y superior, esto es suficiente (puede que haya comenzado antes, pero esta es la primera confirmación que pude encontrar rápidamente):
git checkout daves_branch
Tenga en cuenta que con las versiones recientes de Git, este comando no creará una rama local y lo pondrá en un estado de "HEAD separado". Si desea una sucursal local, utilice la --track
opción.
Los detalles completos están aquí: 3.5 Ramificación de Git: sucursales remotas, sucursales de seguimiento
He usado fetch
seguido de checkout
...
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
...¿dónde <rbranch>
está la sucursal remota o la referencia de origen y es la sucursal local o la referencia de destino<lbranch>
aún inexistente que desea rastrear y que probablemente desee nombrar igual que la sucursal remota o la referencia de origen? Esto se explica en opciones en la explicación de .<refspec>
Bash es tan inteligente que completa automáticamente el primer comando si tabulo después de las primeras letras de la rama remota. Es decir, ni siquiera tengo que nombrar la sucursal local; Bash copia automáticamente el nombre de la sucursal remota por mí. ¡Gracias, Bash!
Además, como muestra la respuesta en esta publicación similar de Stack Overflow , si no nombras la sucursal local en fetch
, aún puedes crearla cuando la revises usando la -b
bandera. Es decir, git fetch <remote> <branch>
seguido de git checkout -b <branch> <remote>/<branch>
hace exactamente lo mismo que mi respuesta inicial. Y evidentemente, si su repositorio tiene solo un control remoto, puede hacerlo git checkout <branch>
después fetch
y se creará una sucursal local para usted. Por ejemplo, acaba de clonar un repositorio y desea verificar ramas adicionales desde el control remoto.
Creo que parte de la documentación fetch
puede haber sido copiada palabra por palabra de pull
. En particular, la sección de <refspec>
opciones es la misma. Sin embargo, no creo que eso fetch
suceda nunca merge
, por lo que si dejas el lado de destino de los dos puntos vacío, fetch
no deberías hacer nada .
NOTA: git fetch <remote> <refspec>
es la abreviatura de git fetch <remote> <refspec>:
que por tanto no haría nada, pero git fetch <remote> <tag>
es lo mismo git fetch <remote> <tag>:<tag>
que debería copiar el mando <tag>
localmente.
Supongo que esto sólo es útil si desea copiar una rama remota localmente, pero no necesariamente verificarla de inmediato. De lo contrario, ahora usaría la respuesta aceptada , que se explica en detalle en la primera sección de la descripción de pago y más adelante en la sección de opciones bajo la explicación de --track
, ya que es una frase breve. Bueno... una especie de frase ingeniosa, porque aún así tendrías que correr git fetch <remote>
primero.
Para su información: El orden de <refspecs>
(fuente:destino) explica el extraño método anterior a Git 1.7 para eliminar ramas remotas . Es decir, no introduzca nada en la especificación de referencia de destino.
Si está intentando "comprar" una nueva rama remota (que existe sólo en la remota, pero no localmente), esto es lo que necesitará:
git fetch origin
git checkout --track origin/<remote_branch_name>
Esto supone que desea recuperar desde el origen . De lo contrario, reemplace el origen por su nombre remoto .