Por desgracia, si son equivalentes o no, en general, depende de la rama que se encuentra, su configuración, fase de la luna, etc.
Puede resolver esto desde la página git pull
hombre, que a mí ve descrito a continuación, pero generalmente trataré de evitar tener que resolverlo haciendo: git fetch origin
y luego git merge origin/foo
. (Escribí un somewhat rambling blog post about this.)
Sin embargo, su pregunta es realmente acerca del comportamiento predeterminado de git pull
cuando no especifica un control remoto o un refspec. Podemos resolver esto desde el git pull
man page, y en particular el DEFAULT BEHAVIOUR
section. Esto es algo difícil de entender, así que he puesto en negrita las únicas partes que realmente se aplican a su pregunta dado que (a) usted está en la rama foo
, (b) creó esa rama como describió en la pregunta y (c) no ha cambiado su configuración.
A menudo las personas usan git pull sin dar ningún parámetro. Tradicionalmente, esto ha sido equivalente a decir git pull origin
. Sin embargo, cuando la configuración branch.<name>.remote
está presente en la rama <name>
, ese valor se usa en lugar de origin
.
Con el fin de determinar qué URL a usar para traer desde, el valor de la configuración remote.<origin>.url
es consultado y si no hay ninguna de estas variables, se utiliza el valor de URL:
línea en $GIT_DIR/remotes/<origin>
archivo.
Para determinar qué ramas remotas recuperar (y opcionalmente almacenar en las ramas de seguimiento remoto) cuando el comando se ejecuta sin parámetros refspec en la línea de comandos, se consultan los valores de la variable de configuración remote.<origin>.fetch
, y si hay no hay ninguno, se consulta el archivo $GIT_DIR/remotes/<origin>
y se usan sus líneas Pull:
.Además de los formatos refspec descritos en la sección Opciones, puede tener un refspec globbing que tiene este aspecto:
refs/heads/*:refs/remotes/origin/*
Un refspec globbing debe tener una RHS no vacío (es decir, debe almacenar lo que eran exagerado en rastreos de seguimiento remoto), y su LHS y RHS deben terminar con /*
. Lo anterior especifica que todas las sucursales remotas se rastrean usando ramas de rastreo remoto en la jerarquía refs/remotes/origin/
con el mismo nombre.
La regla para determinar qué rama remota fusionar después de la recuperación es un poco complicado, para no romper la compatibilidad con versiones anteriores.
Si se proporcionaron refspecs explícitos en la línea de comando de git pull, todos se fusionaron.
Cuando no se proporcionó refspec en la línea de comandos, entonces git pull usa el refspec de la configuración o $GIT_DIR/remotes/<origin>
. En tales casos, se aplican las siguientes reglas:
configuración
If branch.<name>.merge
de la rama actual existe, que es el nombre de la rama en el sitio remoto que se fusionó.
Si el refspec es globbing uno, nada se fusiona.
De lo contrario, la rama remota del primer refspec se fusiona.
Cuando creó la rama foo
con:
git checkout origin/foo -b foo --track
... se han establecido las siguientes opciones de configuración, que asocian su sucursal foo
con refs/heads/foo
en el repositorio origin
:
branch.foo.remote=origin
branch.foo.merge=refs/heads/foo
Por lo tanto, si usted pone eso junto con el s Entences arriba, la respuesta es "Sí, en esta situación que describes, cuando estás en la rama foo
, los comandos git pull
y git pull origin foo
son equivalentes".
No son siempre totalmente equivalente - - mira mi respuesta para más detalles. –