Solución:
La clave es “git-pull sin argumentos”. Cuando haces un git pull
desde una rama, sin especificar una fuente remota o rama, git mira el branch.<name>.merge
ajuste para saber de dónde sacar. git push -u
establece esta información para la rama que está enviando.
Para ver la diferencia, usemos una nueva rama vacía:
$ git checkout -b test
Primero, empujamos sin -u
:
$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.test.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.
If you often merge with the same branch, you may want to
use something like the following in your configuration file:
[branch "test"]
remote = <nickname>
merge = <remote-ref>
[remote "<nickname>"]
url = <url>
fetch = <refspec>
See git-config(1) for details.
Ahora si agregamos -u
:
$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.
Tenga en cuenta que la información de seguimiento se ha configurado para que git pull
funciona como se esperaba sin especificar el control remoto o la rama.
Actualizar: Consejos adicionales:
- Como Mark menciona en un comentario, además de
git pull
Esta configuración también afecta el comportamiento predeterminado degit push
. Si adquiere el hábito de usar-u
para capturar la rama remota que desea rastrear, recomiendo configurar supush.default
valor de configuración paraupstream
. -
git push -u <remote> HEAD
empujará la rama actual a una rama del mismo nombre en<remote>
(y también configurar el seguimiento para que pueda hacergit push
después).
git push -u origin master
… es lo mismo que:
git push origin master ; git branch --set-upstream master origin/master
Haz la última declaración, si olvidas la -u
!
O podrías forzarlo:
git config branch.master.remote origin
git config branch.master.merge refs/heads/master
Si dejas que el comando lo haga por ti, detectará tus errores, como si escribiste una rama inexistente o no lo hiciste. git remote add
; aunque eso podría ser lo que quieres. 🙂
En términos más simples:
Técnicamente, el -u
flag agrega una referencia de seguimiento al servidor ascendente al que está presionando.
Lo importante aquí es que esto le permite hacer una git pull
sin aportar más argumentos. Por ejemplo, una vez que haces un git push -u origin master
, puedes llamar más tarde git pull
y git sabrá que realmente quisiste decir git pull origin master
.
De lo contrario, tendría que escribir el comando completo.