git pull
es un comando de Git utilizado para actualizar la versión local de un repositorio desde otro remoto.
Es uno de los cuatro comandos que solicita interacción de red por Git. Por default, git pull
hace dos cosas.
- Actualiza la rama de trabajo actual (la rama a la que se ha cambiado actualmente)
- Actualiza las referencias de rama remota para todas las demás ramas.
git pull
recupera (git fetch
) las nuevas confirmaciones y las fusiona (git merge
) en tu rama local.
La síntaxis de este comando es el siguiente:
# Formato General
git pull OPCIONES REPOSITORIO REFSPEC
# Pull de una rama específica
git pull NOMBRE-REMOTo NOMBRE-RAMA
En donde:
- OPCIONES son las opciones de comandos, como
--quiet
o--verbose
. Puedes leer más sobre las diferentes opciones en la Documentación de Git. - REPOSITORIO es la URL de tu repositorio. Por ejemplo: https://github.com/freeCodeCamp/freeCodeCamp.git
- REFSPEC especifica cuáles referencias recuperar y cuáles referencias locales actualizar.
- NOMBRE-REMOTO es el nombre de tu repositorio remoto. Por ejemplo: origin.
- NOMBRE-RAMA es el nombre de tu rama. Por ejemplo: develop.
Nota
Si tienes cambios no confirmados, la parte de fusión del comando git pull
fallará y tu rama local quedará intacta.
Por lo tanto, siempre deberías confirmar tus cambios en una rama antes de actualizar nuevas confirmaciones de un repositorio remoto.
Tabla de Contenidos
- Usando
git pull
- Control de Versiones Distribuido
git fetch
+git merge
git pull
en IDEs
Usando git pull
Usa git pull
para actualizar un repositorio local del repositorio remoto correspondiente. Por ejemplo: Mientras trabajas localmente en main
, ejecuta git pull
para actualizar la copia local de main
y actualizar las otras ramas remota de seguimiento remoto. (Más información sobre referencias de rama remota en la siguiente sección).
Sin embargo, hay algunas cosas que hay que tener en cuenta para que ese ejemplo sea cierto:
El repositorio local tiene un repositorio remoto vinculado.
- Confirma esto ejecutando
git remote -v
- Si existen múltiples remotos,
git pull
podría no ser suficiente información. Es posible que debas ingresargit pull origin
ogit pull upstream
.
La rama a la que te has movido tiene una rama de seguimiento remoto correspondiente.
- Revisa esto ejecutando
git status
. Si no hay una rama de seguimiento remota, Git no sabe de dónde extraer la información.
Control de versiones distribuido
Git es un Sistema de Control de Versiones Distribuido (DVCS). Con DVCS, los desarrolladores pueden estar trabajando en el mismo archivo al mismo tiempo en ambientes separados. Después de subir el código al repositorio remoto compartido, otros desarrolladores pueden bajar el código modificado.
Interacciones de red en Git
Existen solo cuatro comandos que solicitan interacción de red en Git. Un repositorio local no tiene conocimiento de los cambios hechos en un repositorio remoto hasta que hay una solicitud de información. Y, un repositorio remoto no tiene conocimiento de los cambios locales hasta que las confirmaciones son enviadas.
Los cuatro comandos de red son:
git clone
git fetch
git pull
git push
Ramas en DVCS
Cuando trabajas con Git, puede parecer que hay demasiadas copias del mismo código flotando por todas partes. Hay diferentes versiones del mismo archivo en cada rama. Y, diferentes copias de la misma rama en la computadora de cada desarrollador y en la remota. Para mantener el seguimiento, Git usa algo llamado referencias de rama remota.
Si ejecutas git branch --all
dentro de un repositorio de Git, las referencias de rama remota aparecen en rojo. Estas son copias de solo lectura del código y como aparece en el control remoto. (¿Cuándo fue la última interacción de red que habría traído información localmente? Recuerda cuando se actualizó la información por última vez. La información en la referencia de rama remota refleja la información de esa interacción).
Con las referencias de rama remota, puedes trabajar en Git en varias ramas sin interacción de red. Cada vez que ejecutes los comandos git pull
o git fetch
, actualizas las referencias de rama remota.
git fetch más git merge
git pull
es un comando combinado, que equivale a git fetch
+ git merge
.
git fetch
Por sí mismo, git fetch
actualiza todas las referencias de rama remota en tu repositorio local. En realidad, no se reflejan cambios en ninguna de las ramas de trabajo locales.
git merge
Sin ningún argumento, git merge
fusionará la referencia de rama remota correspondiente a la rama de trabajo local.
git pull
git fetch
actualiza las referencias de ramas remotas. git merge
actualiza la rama actual con la referencia de rama remota correspondiente. Utilizando git pull
, obtienes ambas partes de estas actualizaciones. Pero, esto significa que si te mueves a la rama feature
y ejecutas git pull
, cuando te muevas a master
, cualquier nueva actualización no estará incluida. Cuando te muevas a otra rama que pudiera tener nuevos cambios, siempre es buena idea ejecutar git pull
.
git pull en IDEs
El lenguaje común en otros IDES podría no incluir la palabra pull
. Si buscas las palabras git pull
pero no las ves, busca por la palabra sync
en su lugar.
Recuperando un PR (Pull Request) remoto en tu repositorio local
Para propósitos de revisión y tal, PRs en remotos deberían ser recuperados al repositorio local. Puedes usar el comando git fetch
como sigue para lograrlo:
git fetch origin pull/ID/head:NOMBRERAMA
ID es el ID de la solicitud de Pull y NOMBRERAMA es el nombre de la rama que quieres crear. Una vez que la rama ha sido creada, puedes usar git checkout
para cambiarte a esa rama.
Otros recursos sobre git
Traducido del artículo Git Pull Explained