¿Cómo descargar una rama con git?

214

Tengo un proyecto alojado en GitHub. Creé una rama en una computadora, luego envié mis cambios a GitHub con:

git push origin branch-name

Ahora estoy en una computadora diferente y quiero descargar esa rama. Entonces intenté:

git pull origin branch-name

... pero todo lo que hizo fue sobrescribir mi rama maestra con los cambios en mi nueva rama.

¿Qué debo hacer para extraer correctamente mi rama remota, sin sobrescribir las ramas existentes?

Andrés
fuente

Respuestas:

375

Gracias a una pregunta relacionada , descubrí que necesito "pagar" la sucursal remota como una nueva sucursal local y especificar un nuevo nombre de sucursal local.

git checkout -b newlocalbranchname origin/branch-name

O puedes hacer:

git checkout -t origin/branch-name

Este último creará una rama que también está configurada para rastrear la rama remota.


Actualización: Han pasado 5 años desde que originalmente publiqué esta pregunta. He aprendido mucho y git ha mejorado desde entonces. Mi flujo de trabajo habitual es un poco diferente ahora.

Si quiero obtener las ramas remotas, simplemente ejecuto:

git pull

Esto buscará todas las ramas remotas y fusionará la rama actual. Mostrará una salida que se ve así:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

Ahora Git sabe sobre mi nuevo my-bugfix-branch. Para cambiar a esta rama, simplemente puedo ejecutar:

git checkout my-bugfix-branch

Normalmente, necesitaría crear la rama antes de poder verificarlo, pero en las versiones más nuevas de git, es lo suficientemente inteligente como para saber que desea retirar una copia local de esta rama remota.

Andrés
fuente
Estoy usando GIT 1.7.2.5, y el comando que trabajó para mí era: git branch --track XX origin/XX. Tu comando me da un error.
dimitarvp
8
Si no tiene todas las ramas remotas descargadas, esto puede fallar. Haz "actualización remota de git" para derribarlos.
Ben Walding
1
En realidad, puede ser aún más corto "git checkout branch-name". Si el nombre de la sucursal es lo mismo que una sucursal de seguimiento remota (es decir, el origen / nombre de la sucursal), entonces es automáticamente una sucursal de seguimiento local.
DavidN
64

Para cualquier novato de Git como yo, aquí hay algunos pasos que puede seguir para descargar un repositorio remoto y luego cambiar a la rama que desea ver. Probablemente abusen de Git de alguna manera, ¡pero hizo el trabajo por mí! :-)

Clone el repositorio para el que desea descargar el código (en este ejemplo, elegí el proyecto LRResty en Github):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

Verifique qué rama está utilizando en este momento (debe ser la rama maestra):

$ git branch    
* master

Mira la rama que quieres, en mi caso se llama 'arcified':

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

Confirme que ahora está utilizando la rama que deseaba:

$ git branch    
* arcified
  master

Si desea actualizar el código nuevamente más tarde, ejecute git pull:

$ git pull
Already up-to-date.
Dan J
fuente
"Probablemente abusen de Git de alguna manera" - no, esto es exactamente correcto.
Big McLargeHuge
27

Puedes usar git remote como:

git fetch origin

y luego configure una rama local para rastrear la rama remota como se muestra a continuación:

git branch --track [local-branch-name] origin/remote-branch-name

Ahora tendría el contenido de la rama remota de github en local-branch-name.

Puede cambiar a ese nombre de sucursal local y comenzar a trabajar:

git checkout [local-branch-name]
ardsrk
fuente
17

puedes usar :

git clone <url> --branch <branch>

para clonar / descargar solo el contenido de la rama.

Esto me ayudó especialmente, ya que el contenido de mi rama era completamente diferente de la rama maestra (aunque este no suele ser el caso). Por lo tanto, las sugerencias enumeradas por otros arriba no me ayudaron y terminaría obteniendo una copia del maestro incluso después de que revisé la rama e hice un git pull.

Este comando le daría directamente el contenido de la rama. Funcionó para mi.

Viejo Markus
fuente
1
Esta es la mejor respuesta. Simple y efectivo.
Derek
2
Esto no parece funcionar para mí. Dice que ya hay una carpeta con ese nombre (que, por supuesto, la hay)
Jonathan Tuzman
1
@ Jonathan No agregará una nueva sucursal con la existente. Solo se puede usar para clonar una copia nueva. No veo por qué ya debería haber una carpeta con ese nombre si aún no ha clonado el repositorio. Intenta clonar en un lugar diferente.
Viejo Markus el
No actualiza un proyecto existente con una nueva sucursal
Dazzle
16

Navegue a la carpeta en su nueva máquina que desea descargar de git en git bash.

Use el siguiente comando para descargar el código de cualquier rama que desee

git clone 'git ssh url' -b 'Branch Name'

Descargará el código de sucursal respectivo.

Srikanta Sahoo
fuente
9

Git clone y cd en el nombre del repositorio:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

Cambie a la rama (una página de GitHub) que quiero:

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

Y tira de la rama:

$ git pull
Already up-to-date.

ls:

$ ls
index.html      params.json     stylesheets
Pablo Ezequiel
fuente
0

git checkout -b branch / name

nombre / rama de origen de extracción de git

Deslumbrar
fuente
0

Puedes probar

git fetch <remoteName> <branchName>

P.ej:

git fetch origin MyRemoteBranch
Bimzee
fuente
-8

Cree un nuevo directorio y haga un clon en su lugar.

git clone (dirección de origen) (nombre de la sucursal)

seisatsu
fuente
3
No puedes clonar solo una rama en Git. Solo se puede hacer un clon de repositorio completo.
Alan Haggai Alavi