Conseguir ramas de git existentes para rastrear ramas remotas

81

Mi flujo de trabajo habitual cuando trabajo con git es algo como esto:

  1. crear un repositorio local
  2. hacer algo de trabajo en ese repositorio, agregar / cambiar archivos, etc.
  3. decidir que quiero una ubicación remota central para el repositorio y crear una
  4. enviar todas las confirmaciones de mi repositorio local a este nuevo repositorio remoto

Ahora, sin embargo, quiero ser capaz de pushy pulldesde este repositorio remoto sin tener que especificar dónde estoy empujando o tirando a partir; Quiero que mi maestro local rastree al maestro remoto.

La forma correcta de hacer esto no me queda clara y no he podido determinarla a partir de la documentación, aunque en realidad no debería ser más de un comando.

Debido a que es algo que solo se hace una vez por repositorio, generalmente he empleado una de dos soluciones simples, pero hacky:

  1. utilizado git clonepara crear un nuevo repositorio local y eliminó el anterior. Después de la clonación de git, el nuevo repositorio se configura para rastrear el origen.
  2. .git / config editado manualmente para hacer el origen de la pista maestra.

Creo que debería poder ejecutar un comando, probablemente alguna forma de git remoteconfigurar un repositorio existente para que el maestro rastree un maestro remoto. ¿Alguien puede decirme cuál es ese comando?

SpoonMeiser
fuente
En realidad, resulta que antes se hizo una pregunta similar: stackoverflow.com/questions/312055/…
SpoonMeiser
Para la versión de git> = 1.7.0.0, puede hacerlo en un comando, se explica aquí .
KiRPiCH
4
Esto es en realidad un duplicado de: stackoverflow.com/questions/520650/…
toma el

Respuestas:

155

Utilice el argumento de configuración ascendente:

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

La ejecución del comando anterior actualiza su archivo .git / config correctamente e incluso verifica con esta salida:

"Branch local-branch-name configurado para realizar un seguimiento de la rama remota remote-branch-name desde el origen"

EDITAR: Como dijo martijn : "En la versión Git v1.8.0, --set-upstream está en desuso. Use --set-upstream-to en su lugar".

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

Consulte esto para obtener más información.

Jorge
fuente
18
En la versión Git v1.8.0, --set-upstreamestá en desuso. Úselo en su --set-upstream-tolugar.
Martijn
1
Uso git remote show <remote>para ver qué ramas son seguidos por sus ramas locales
naitsirch
1
Esta edición sugerida no debería haber sido aprobada, cambió fundamentalmente la respuesta (y la dejó en un estado incorrecto, ya que los argumentos de la nueva opción están invertidos). Deje que el afiche original decida si quiere actualizar su respuesta o no.
1
También puede empujar la rama nuevamente congit push -u
mattr-
¿No set upstreamconfigura las asignaciones sin realmente presionar ningún código? push te obliga a insertar código para crear asignaciones. Tal vez aún no tenga un código, pero ¿desea establecer un mapeo?
user20358
19

git help remotedebería mostrarte lo que necesitas saber. Creo que lo que quieres 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 configurarlos.

Mike Pape
fuente
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.
William Pursell
clonar el repositorio central y editar .git / config son las dos opciones que ya mencioné en mi pregunta.
SpoonMeiser
8

También puede usar esto si desea crear una nueva sucursal local para rastrear una sucursal remota:

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

o mejor:

git checkout -t origin/branch_name
antes
fuente
git checkout --track -b branchname origin branchname fatal: git checkout: la actualización de rutas es incompatible con el cambio de ramas. ¿Tenía la intención de verificar 'origen / nombre de rama' que no se puede resolver como confirmación?
edebill
6

En versiones más nuevas de git puedes usar

git branch --track origin/branch_name
fazineroso
fuente
4
Esta publicación se marca automáticamente como de baja calidad porque es un código muy corto / único. ¿Le importaría ampliarlo agregando texto para explicar cómo resuelve el problema?
gung - Reincorporar a Monica
¡Esta es la respuesta más precisa! Todo lo anterior no es incorrecto o ya no es compatiblegit branch --set-upstream BRANCH fatal: the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead.
GTodorov
3

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

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

Denis C
fuente
1

Avance rápido tres años (vea lo que hice allí :-)), intenté extraer una rama sin seguimiento usando Git Bash y recibí

If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream-to=origin/<branch> develop

Lo siguiente logró lo que necesitaba:

$ git branch --set-upstream-to=origin/develop develop Branch 'develop' set up to track remote branch 'develop' from 'origin'.

MikeA
fuente
-1

Utilice este comando:

git clone [<options>] [--] <repo> [<dir>]
RidhaHleli
fuente
Hola, es posible que desee volver a leer la pregunta: menciona la clonación del repositorio nuevamente, pero la pregunta es sobre cuándo se creó el repositorio local primero y no realizó un seguimiento inicial del control remoto.
SpoonMeiser