Git: ¿cuál es el control remoto predeterminado configurado para la sucursal?

192

Tengo un repositorio desnudo remoto hub. Solo trabajo en la mastersucursal. La última oración de este mensaje de error a continuación me hace preguntarme: ¿cómo puedo saber cuál es el "control remoto configurado por defecto para su sucursal actual" ? ¿Y cómo lo configuro?

[myserver]~/progs $ git remote -v
hub     ~/sitehub/progs.git/ (fetch)
hub     ~/sitehub/progs.git/ (push)

[myserver]~/progs $ git branch -r
  hub/master

[myserver]~/progs $ cat .git/HEAD
ref: refs/heads/master

[myserver]~/progs $ git pull hub
You asked to pull from the remote 'hub', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
leonbloy
fuente

Respuestas:

230

Rastrea la rama remota

Puede especificar el repositorio remoto predeterminado para empujar y tirar usando la opción de seguimiento de git-branch. Normalmente haría esto especificando la opción --track al crear su rama maestra local, pero como ya existe, actualizaremos la configuración manualmente de la siguiente manera:

Edita tu .git/config

[branch "master"]
  remote = origin
  merge = refs/heads/master

Ahora puedes simplemente git push y git pull.

[ fuente ]

scragz
fuente
¿No se establecería esto también si el OP lo hiciera git pull hub master?
Ryan Bigg
@ Ryan Bigg: No automáticamente, o siempre arruinarías tu configuración.
meter
36
¿Por qué editar un archivo de configuración cuando existen comandos git por esta misma razón?
urschrei
43
git branch --set-upstream local_branch remote / remote_branch (o al presionar, como se detalla a continuación)
urschrei
25
@scragz: ¡De ninguna manera! El enfoque de comando garantiza que su .gitconfig se deja en un estado significativo.
smci
260

Puede hacerlo de manera más simple, garantizando que su .gitconfig se quede en un estado significativo:

Usando Git versión v1.8.0 y superior

git push -u hub master al empujar, o:
git branch -u hub/master

O

(Esto configurará el control remoto para la rama actualmente desprotegida en hub/master)
git branch --set-upstream-to hub/master

O

(Esto establecerá el control remoto para la rama llamada branch_namea hub/master)
git branch branch_name --set-upstream-to hub/master

Si estas usando v1.7.x o antes

debes usar --set-upstream:
git branch --set-upstream master hub/master

urschrei
fuente
3
Para cualquiera que se pregunte: el segundo comando se puede usar para las sucursales existentes
Eric Hu
1
@ eric-hu como se detalla en mi respuesta aquí: stackoverflow.com/questions/4878249/…
urschrei
1
El set-upstream[-to]comando cambia el control remoto configurado actualmente . El póster original preguntaba sobre el valor predeterminado control remoto configurado por . ¿Seguramente ese no es el mismo concepto?
Steve Pitchers
1
Cada rama tiene un control remoto configurado actualmente , que especifica qué rama en ese control remoto corresponde a la rama local. El control remoto configurado predeterminado determina qué rama se empuja o se extrae si no especifica una explícitamente. Esta respuesta solo establece la actual . La respuesta aceptada (edición manual) también le permite establecer la predeterminada . ¿Alguien sabe un comando que evite tener que editar a mano?
Steve Pitchers
1
--set-upstream-torealizó exactamente los mismos cambios .git/configque @scragz sugirió en su respuesta .
Strah
-1

El comando para obtener el control remoto push efectivo para la rama, por ejemplo, maestro, es:

git config branch.master.pushRemote || git config remote.pushDefault || git config branch.master.remote

He aquí por qué (de la salida "man git config"):

branch.name.remote [...] le dice a git fetch y git push qué control remoto para buscar / push a [...] [for push] puede anularse con remote.pushDefault (para todas las ramas) [y] para el rama actual [..] anulada por branch.name.pushRemote [...]

Por alguna razón, "man git push" solo informa acerca de branch.name.remote (a pesar de que tiene la menor precedencia de los tres) + declara erróneamente que si no está configurado, empuja los valores predeterminados al origen; no lo hace, es solo que cuando clona un repositorio, branch.name.remote se establece en origen, pero si elimina esta configuración, git push fallará, aunque todavía tenga el origen remoto

darkdiatel
fuente
Esta pregunta ya fue respondida con una respuesta más útil.
Austin Schäfer