`git fetch` una rama remota

Resuelto David asked hace 12 años • 31 respuestas

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_branchal repositorio local para que realice un seguimiento origin/daves_branch?

Lo intenté:

$ git fetch origin daves_branch
$ git checkout daves_branch
David avatar Mar 03 '12 00:03 David
Aceptado

Actualización: uso de Git Switch

Toda la información escrita a continuación era precisa, pero git switchse agregó un nuevo comando que simplifica el esfuerzo.

Si daves_branchexiste 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 switchen el repositorio remoto. Luego también configurará automáticamente el seguimiento remoto de sucursales.

Tenga en cuenta que si daves_branchno existe localmente, deberá hacerlo git fetchprimero 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

--trackes 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 --trackopción.

Los detalles completos están aquí: 3.5 Ramificación de Git: sucursales remotas, sucursales de seguimiento

rtn avatar Mar 02 '2012 17:03 rtn

He usado fetchseguido 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 -bbandera. 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 fetchy 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 fetchpuede 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 fetchsuceda 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.

Mark Mikofski avatar Apr 19 '2013 00:04 Mark Mikofski

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 .

paneer_tikka avatar May 17 '2013 12:05 paneer_tikka