2012-06-29 20 views
145

Ya tengo una rama maestra local que rastrea la rama maestra remota de un proyecto github. Ahora, un colaborador mío ha creado una nueva rama en el mismo proyecto, y quiero hacer la siguiente consecuencia:Seguir una nueva rama remota creada en GitHub

  1. crear una nueva rama local
  2. hacen de esta nueva rama seguimiento del recién crear sucursales remotas.

¿Cómo debo hacerlo correctamente?

+1

git checkout --track -b / también funciona. – MLister

+10

... o simplemente 'git checkout -t /'.Si solo hay una rama de seguimiento remoto que termina en '', puede hacer 'git checkout ' y git adivina lo que quiere decir. –

+0

Véase también [¿Cómo hacer que una rama de Git existente rastree una rama remota?] (Http://stackoverflow.com/q/520650/456814). –

Respuesta

196
git fetch 
git branch --track branch-name origin/branch-name 

El primer comando asegura que tiene una bifurcación remota en el repositorio local. El segundo comando crea una rama local que rastrea la rama remota. Supone que su nombre remoto es origin y el nombre de la sucursal es branch-name.

--track opción está habilitada de forma predeterminada para las sucursales remotas y puede omitirla.

+3

Cuando hago esto, aparece una advertencia: el nombre de la rama 'negrita' es ambiguo. – Ultrasaurus

+14

Si solo hay una rama remota con ese nombre de rama, puede hacer 'git checkout ' y git lo comprobará automáticamente y configurará una rama de seguimiento. Solo quería reiterar lo que @Mark Longair dijo anteriormente en este comentario: http://stackoverflow.com/questions/11262703/how-to-track-a-new-remote-branch-created-on-github#comment14806580_11262703. –

+0

El nombre de mi sucursal remota es 'remotes/origin/develop'? ¿No debería ser solo 'origen/desarrollo'? ¿Son estos lo mismo? –

5

Cuando la sucursal no es una sucursal remota, puede enviar su sucursal local directamente al control remoto.

git checkout master 
git push origin master 

o cuando tiene una rama dev

git checkout dev 
git push origin dev 

o cuando existe la rama remota

git branch dev -t origin/dev 

Hay algunas otras posibilites para impulsar una rama remota.

+0

gracias. Pero no creo que quiera 'empujar una rama remota' aquí ... – MLister

+0

Luego tomas la tercera opción. Cuando existe una rama remota, puede crear una sucursal local y rastrear la sucursal remota :) es igual a la versión de max pero más corta. – Stony

26

En primer lugar hay que buscar el repositorio remoto:

git fetch remoteName 

de lo que puede crear la nueva rama y configurarlo para realizar un seguimiento de la rama remota que desea:

git checkout -b newLocalBranch remoteName/remoteBranch 

Puede también use "git branch --track" en lugar de "git checkout -b" como máximo especificado.

git branch --track newLocalBranch remoteName/remoteBranch 
+0

Si hace 'checkout -b' usando una rama remota como punto de partida, entonces no es necesario usar' --track'. –

+5

Además, como se señala en [este comentario] (http://stackoverflow.com/questions/11262703/how-to-track-a-new-remote-branch-created-on-github#comment32122710_11262780), si sólo hacer 'git checkout ', y hay una rama remota con el mismo nombre (después de hacer una 'git fetch'), entonces la rama local se configurará automáticamente para rastrear la remota. –

23

Si usted no tiene una rama local existente, que es realmente tan simple como:

git fetch 
git checkout <remote-branch-name> 

Por ejemplo, si usted lo trae y hay una nueva rama de seguimiento remoto llamado origin/feature/Main_Page, acaba de hacer esto:

git checkout feature/Main_Page 

esto crea una rama local con el mismo nombre que la rama remota, el seguimiento de esa rama remota. Si tiene varios mandos a distancia con el mismo nombre de la sucursal, se puede utilizar el menos ambiguo:

git checkout -t <remote>/<remote-branch-name> 

Si ya ha hecho la sección local y no desea eliminarlo, ver How do you make an existing Git branch track a remote branch?.

+0

'git checkout 1,5-branch' (' controles remotos/aguas arriba/1,5-branch' está en la salida de '-a' rama GIT) resultados en' error: pathspec '1,5-rama' no encontró ningún archivo (s) conocida a git. Al cambiar esto a 'git checkout upstream/1.5-branch' se produce HEAD separado y no se crea ninguna rama local. Creo que esta parte de la respuesta es simplemente incorrecta. Esto es con git 2.4.3 –

+0

El primer comando funciona para mí en git 1.9.3, incluso para diferentes controles remotos. Es posible que este comportamiento haya cambiado. El resultado de su segundo comando es lo que esperaría. Sin -t, no está especificando que desea hacer otra cosa que no sea mirar esa versión específica en el control remoto. – kotoole

+1

Estoy de acuerdo con @PiotrDobrogost, creo que su afirmación "Esto crea una sucursal local con el mismo nombre ..." está equivocada. Lo que fetch * will * do (cuando se llama de esta manera) es crear una * branch de seguimiento remoto * para cada rama en el control remoto. Eso significa una sucursal en su repositorio local llamado '/'. Una rama de seguimiento remoto es de solo lectura, lo que indica dónde se encontraba esa rama en el último control remoto. Llamar a 'checkout' en esa rama ref te pone en modo HEAD separado, tal como dice Piotr. Tenga en cuenta que especificar la rama remota a buscar evita la creación de ramas de seguimiento remoto no deseadas. – scanny

Cuestiones relacionadas