¿Cómo funciona git pull <remote>?

Supongamos que tengo un repository locol git y un repository remoto llamado hub . Supongamos también que mi repository local tiene branch1 y branch2 , mientras que el repository remoto tiene branch1 , branch2 y branch3 .

Si llamo

 git pull hub 

¿fusionará esto automáticamente tanto hub/branch1 con branch1 y hub/branch2 con branch2 , o solo fusionará la twig remota correspondiente en mi twig actualmente revisada? ¿También creará automáticamente una nueva branch3 ?

Pregunta 1

¿Combinará esto automáticamente tanto hub / branch1 con branch1 y hub / branch2 con branch2, o solo fusionará la twig remota correspondiente en mi twig actualmente revisada?

El último. En realidad, es incluso un poco más complejo, se extraerá de la sucursal remota que la sucursal actual efectivamente está rastreando.

Supongamos que quiere que branch1 local branch1 hub branch1

 git branch --set-upstream-to=hub/branch1 branch1 

Pero nada le impide rastrear otra twig remota ( advertencia: esto hará que su cerebro duela)

 git branch --set-upstream-to=hub/branch2 branch1 

La branch1 ahora rastrea la branch2 : D.

Pregunta 2

¿También creará automáticamente una nueva twig local3?

No. Esto debe hacerse de forma explícita.

Si está revisando una nueva sucursal, también puede hacer que rastree una sucursal remota de manera pnetworkingeterminada:

 git checkout -t hub/branch3 

Esto creará una branch3 rastrea la branch3 .


Pero, ¿y si quiero que Git tire todas las twigs?

 git pull --all 

Traerá todas sus sucursales locales que están rastreando sucursales remotas al día. Pero en realidad no revisará nuevas sucursales remotas.

man git-pull

dice en la primera frase de 'DESCRIPCIÓN':

"Incorpora cambios de un repository remoto a la twig actual".

Primera pregunta: solo fusionará la twig remota correspondiente en su twig actualmente seleccionada.

Segunda pregunta: las sucursales no se crean automáticamente.

Si su sucursal actual ya está rastreando una sucursal remota, esta última se fusionará con la anterior. Y no creará ninguna sucursal local.

La forma completa del command es así:

 git pull remote remote-branch 

Y siempre se funde en su twig local ACTUALMENTE extraída.

Puede omitir el último argumento, si su twig CURRENT ya está rastreando una twig remota. Por ejemplo, si su twig local actualmente verificada es branch1 , y usted ha hecho una

 git push hub branch1 

en el pasado, entonces este es el caso. Asi que

 git pull hub 

en realidad significa

 git pull hub branch1 

Si quieres ver dónde están las sucursales remotas, sin fusionar nada

 git fetch 

git pull hub es equivalente a una combinación de git fetch hub y git merge .

git fetch hub actualizará todas las twigs hub/* . git merge fusionará hub/branch1 en branch1 . (suponiendo que actualmente se encuentre en la twig1).

Nada más está hecho. Ninguna otra twig local se ve afectada.


Para ser un poco más preciso …

git config remote.hub.fetch mostrará qué exactamente está actualizado por git fetch hub . Probablemente está configurado como

 +refs/heads/*:refs/remotes/hub/* 

Esto es decirle a git fetc h que actualice hub/* .

git merge fusionará la twig upstream configurada. Puede mostrar la twig ascendente configurada con la git branch -vv . Esto probablemente muestre algo así como

 * branch1 1234567 [hub/branch1] message 

Esto es contar git merge para fusionar hub/branch1 en branch1