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.  

  1. Actualiza la rama de trabajo actual (la rama a la que se ha cambiado actualmente)
  2. 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

  • Usandogit 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 ingresar git pull origin o git 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