2009-07-26 17 views
74

Mi flujo de trabajo habitual cuando se trabaja con git, es algo como esto:ramas git existentes para realizar un seguimiento de las sucursales remotas

  1. crear un repositorio local
  2. hacer algún trabajo en ese repositorio, añadir archivos/cambio etc.
  3. decido que quiero una ubicación remota central para el repositorio, y crear una
  4. empujar todas las confirmaciones de mi repositorio local a este nuevo repositorio remoto

Ahora, sin embargo, quiero poder push y pull desde este repositorio remoto sin tener que especificar desde dónde estoy presionando o tirando; Quiero que mi maestro local rastree el maestro remoto.

El correcto no es claro para mí, y no he podido determinarlo a partir de la documentación, aunque en realidad no debería ser más de un comando.

Debido a que es algo que sólo ha hecho una vez al repositorio, he empleado generalmente una de dos soluciones simples, pero hacky,:

  1. utiliza git clone para hacer un nuevo repositorio local, y eliminado el antiguo . Después de la clonación de git, el nuevo repositorio está configurado para rastrear el origen.
  2. editó manualmente .git/config para crear el origen de la pista maestra.

creo que debería ser capaz de ejecutar un comando, probablemente algún tipo de git remote para configurar un repositorio existente para tener un seguimiento de un maestro principal remoto. ¿Alguien puede decirme qué es ese comando?

+0

vuelve realidad que una pregunta similar se ha hecho antes: http: // stackoverflow. com/questions/312055/how-do-i-fix-missing-git-remote-details – SpoonMeiser

+4

Esto es en realidad un duplicado de: http://stackoverflow.com/questions/520650/how-do-you-ma ke-an-existing-git-branch-track-a-remote-branch – takeshin

+0

Duplicate of [¿Cómo hacer que una rama de Git existente rastree una rama remota?] (http://stackoverflow.com/q/520650/456814) . –

Respuesta

146

Usar la puesta a punto aguas arriba arg:

git branch --set-upstream local-branch-name origin/remote-branch-name 

Ejecutando el comando anterior, actualiza su archivo .git/config correctamente e incluso verifica con esta salida:

"Sucursal nombre de sucursal local configurado para rastrear la sucursal remota del nombre de la sucursal remota desde el origen".

EDIT: Comomartijn dijo: "En la versión v1.8.0 Git, -set-aguas arriba está en desuso Use -set-aguas arriba a su lugar.."

git branch --set-upstream-top local-branch-name origin/remote-branch-name 
+16

En la versión Git v1.8.0, '--set-upstream' está en desuso. Use '--set-upstream-to' en su lugar. – Martijn

+1

Utilice 'git remote show ' para ver qué ramas son rastreadas por sus sucursales locales – naitsirch

+1

[Esta edición sugerida] (http://stackoverflow.com/review/suggested-edits/4688186) no debería haber sido aprobada, fundamentalmente cambió la respuesta (y la dejó en un estado incorrecto, ya que los argumentos a la nueva opción están invertidos). Deje que el póster original decida si quiere o no actualizar su respuesta. –

18

git help remote debería mostrarle lo que necesita saber. Creo que lo que quiere es

git remote add [remote-name] [remote-url] 

# Set a local branch to follow the remote 
git config branch.[branch-name].remote [remote-name] 

# Set it to automatically merge with a specific remote branch when you pull 
git config branch.[branch-name].merge [remote-master] 

También puede editar manualmente .git/config para configurarlas.

+0

Otra opción es crear su repositorio central, luego eliminar su directorio de trabajo y volver a crearlo clonando desde el repositorio central. Sin embargo, editar .git/config será más informativo. –

+0

clonando el repositorio central y editando .git/config son las dos opciones que ya mencioné en mi pregunta. – SpoonMeiser

6

También puede usar esta opción si desea crear una nueva rama local para realizar un seguimiento de una rama remota:

git checkout --track -b [branch_name] --track origin[or other remote name]/[remote_branch_name] 

o incluso mejor:

git checkout -t origin/branch_name 
+0

git checkout --track -b branchname origen branchname fatal: git checkout: las rutas de actualización no son compatibles con las ramas de conmutación. ¿Pretendes retirar el 'origen/nombre de rama' que no se puede resolver como commit? – edebill

+0

debería haber tenido la opción --track ... – bcolfer

+0

Todavía obtengo el mismo error que edebill. – Von

5

En las versiones más recientes de Git puede utilizar

git branch --track origin/branch_name 
+3

Esta publicación se marca automáticamente como de baja calidad porque es tan corta/solo como código. ¿Le importaría expandirlo agregando texto para explicar cómo resuelve el problema? – gung

1

The --set-upstream flag is deprecated and will be removed.

git branch master --set-upstream-to myupstream/master

Cuestiones relacionadas