etiqueta de pago git, git pull falla en la rama

133

He clonado un repositorio de git y luego verifiqué una etiqueta:

# git checkout 2.4.33 -b my_branch

Esto está bien, pero cuando intento ejecutar git pullen mi rama, git escupe este error:

No hay información de seguimiento para la sucursal actual. Especifique con qué rama desea fusionarse. Ver git-pull (1) para más detalles.

git pull <remote> <branch>

Si desea establecer información de seguimiento para esta sucursal, puede hacerlo con:

git branch --set-upstream new origin/<branch>

Solo quiero git pullactualizar la rama maestra y dejar sola mi rama actual (de todos modos, es una etiqueta). ¿Es posible algo así?

La razón por la que necesito esto es que tengo un script automático que siempre git extrae el repositorio y, por supuesto, falla debido al error anterior.

alesko
fuente

Respuestas:

114

Editar: para versiones más nuevas de Git, --set-upstream masterha quedado en desuso, debe usar --set-upstream-toen su lugar:

git branch --set-upstream-to=origin/master master

Como se le solicitó, puede ejecutar:

git branch --set-upstream master origin/master

Después de eso, simplemente puede ejecutar git pullpara actualizar su código.

Vincent Wen
fuente
55
Esto resolvió el problema. Pero todavía tengo que entender cómo mi rama maestra perdió la referencia al origen. Estaba en una rama y lo hice git checkout master. No pude hacerlo git pullporque se perdió la referencia al origen. Ahora funciona. ¡Gracias!
Ariel
'git branch --set-upstream-to = origin / master master my_branch' funcionó para mí
Blue Clouds
90

Tuve el mismo problema y lo solucioné con este comando:

$ git push -u origin master

Desde el archivo de ayuda, -u básicamente establece el valor predeterminado para los tirones:

-u, --set-upstream`

  For every branch that is up to date or successfully pushed, add 
  upstream (tracking) reference, used by argument-less git-pull(1) and
  other commands. For more information, see branch.<name>.merge in 
  git-config(1).
Simon Raik-Allen
fuente
48

Pruebe estos comandos:

git pull origin master
git push -u origin master
navins
fuente
9

Vuelva a la rama maestra usando

$ git checkout master

y luego ejecuta la git pulloperación

$ git pull origin/master

Después, puede volver a su my_branchnuevo.

cfedermann
fuente
66
Eso es exactamente lo que estoy tratando de evitar. Quería saber si hay una forma "oficial" de hacerlo.
alesko
5

@alesko : no es posible hacer solo git pulldespués de finalizar la compra my_branchpara actualizar mastersolo la rama.
Porque git pulltambién se fusionará con la rama actual -> en su escenario con elmy_branch

@ Simon : eso también hará el empujón. ¿porqué es eso?

$ git branch -u origin/master
Branch master set up to track remote branch master from origin.

y según los documentos:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.
Casey
fuente
4

Primero, asegúrese de estar en la rama correcta.
Entonces (solo una vez):

git branch --track

Después de eso, esto funciona de nuevo:

git pull
drzymala
fuente
4

Es posible que tenga múltiples sucursales. Y su rama actual no estableció su flujo ascendente en remoto.

Pasos para arreglar esto:

git checkout branch_name
git branch --set-upstream-to=origin/remote_branch_name local_branch_name

p.ej

// this set upstream of local branch develop to remote branch  origin/develop,
git branch --set-upstream-to=origin/develop develop

Después de hacer esto, cuando lo hace git pull, se extrae de la rama especificada.

Eric Wang
fuente
3

Puede especificar qué rama desea extraer:

git pull origin master

O puede configurarlo para que su rama maestra local rastree la rama maestra github como una cadena ascendente:

git branch --set-upstream-to=origin/master master
git pull

Este seguimiento de bifurcación se configura automáticamente cuando clona un repositorio (solo para la bifurcación predeterminada), pero si agrega un control remoto a un repositorio existente, debe configurarlo usted mismo. Afortunadamente, el consejo dado por git hace que sea muy fácil recordar cómo hacerlo.

--set-upstream está en desuso en git 1.9.x, aparentemente. En el futuro, querrás usar algo como

git branch -u origin/master

asumiendo que ya has revisado master. Si no, git branch -u origin/master masterfuncionará

Akash Kandpal
fuente
2

Prueba esto

git checkout master

git pull origin master
vanarajcs
fuente
2
Esto realmente no responde la pregunta. Además, aunque no hay una respuesta aceptada, la más votada es mucho más adecuada como respuesta a esta vieja pregunta
2014
1

Debe configurar su seguimiento (ascendente) para la sucursal actual

git branch --set-upstream master origin/master

Ya está en desuso en lugar de eso, puede usar --track flag

git branch --track master origin/master

También me gusta la referencia del documento que notó @casey:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.
Jorman Bustos
fuente
1

Lo que funcionó para mí fue: git branch --set-upstream-to = origin master Cuando hice un pull de nuevo, solo recibí las actualizaciones de master y la advertencia desapareció.

Jason D
fuente
1

Si como yo necesita hacer esto todo el tiempo, puede configurar un alias para hacerlo automáticamente agregando lo siguiente a su .gitconfigarchivo:

[alias]
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`

Cuando vea el mensaje There is no tracking information..., simplemente ejecute git set-upstream, luego git pushnuevamente.

Gracias a https://zarino.co.uk/post/git-set-upstream/

rjmunro
fuente
0

Para descargar actualizaciones:

git fetch origin master

Sin embargo, esto solo actualiza una referencia llamada origin/master. La mejor manera de actualizar su local mastersería el pago / fusión mencionado en otro comentario. Si puede garantizar que su local masterno se ha desviado del tronco principal que origin/masterestá encendido, podría usarlo git update-refpara asignar su corriente masteral nuevo punto, pero probablemente esa no sea la mejor solución para usar de manera regular ...

Twalberg
fuente
0

Este comando está en desuso: git branch --set-upstream master origin/master

Entonces, cuando intento configurar el seguimiento, este es el comando que funcionó para mí:

git branch --set-upstream-to=origin/master master
Aaron Lelevier
fuente