git pull
El comando git pull
se emplea para extraer y descargar contenido desde un repositorio remoto y actualizar al instante el repositorio local para reflejar ese contenido. La fusión de cambios remotos de nivel superior en tu repositorio local es una tarea habitual de los flujos de trabajo de colaboración basados en Git. El comando git pull
es, en realidad, una combinación de dos comandos, git fetch seguido de git merge. En la primera etapa de la operación git pull
ejecutará un git fetch
en la rama local a la que apunta HEAD
. Una vez descargado el contenido, git pull
entrará en un flujo de trabajo de fusión. Se creará una nueva confirmación de fusión y se actualizará HEAD
para que apunte a la nueva confirmación.
Uso de git pull
Funcionamiento
El comando git pull
ejecuta en primer lugar git fetch
, que descarga el contenido del repositorio remoto especificado. Después, se ejecuta git merge
para fusionar las referencias y los encabezados del contenido remoto en una nueva confirmación de fusión local. Para ilustrar mejor el proceso de incorporación de cambios y fusión, veamos el siguiente ejemplo. Supongamos que tenemos un repositorio con una rama principal y un origen remoto.
En este caso, git pull
descargará todos los cambios desde el punto de separación de la rama local y la rama principal. En el ejemplo de arriba, ese punto es E. El comando git pull
recuperará las confirmaciones remotas divergentes, que son A, B y C. A continuación, el proceso de incorporación de cambios creará otra confirmación de fusión local que incluya el contenido de las nuevas confirmaciones remotas divergentes.
Material relacionado
Git log avanzado
VER LA SOLUCIÓN
Aprende a usar Git con Bitbucket Cloud
En el diagrama anterior, podemos ver la nueva confirmación H, que es una confirmación de fusión nueva que incluye el contenido de las confirmaciones remotas A, B y C, y tiene un mensaje de registro combinado. Este es un ejemplo de una de las estrategias de fusión de git pull
. Una opción --rebase
puede combinarse con git pull
para usar una estrategia de fusión de reorganización en lugar de una confirmación de fusión. En el siguiente ejemplo se puede ver cómo funciona una incorporación de cambios de reorganización. Supongamos que nos encontramos en el punto de partida de nuestro primer diagrama y que hemos ejecutado git pull --rebase
.
En este diagrama, ahora podemos ver que la incorporación mediante cambio de base no ha creado la confirmación H, sino que el cambio de base ha copiado las confirmaciones remotas A, B y C y ha reescrito las confirmaciones locales E, F y G para que aparezcan después de ellas en el historial de confirmaciones principales o de origen locales.
Opciones comunes
git pull <remote>
Recupera la copia del origen remoto especificado de la rama actual y fusiónala de inmediato en la copia local. Esto equivale a git fetch <remote>
seguido de git merge origin/<current-branch>
.
git pull --no-commit <remote>
De manera similar a la invocación predeterminada, extrae el contenido remoto, pero no crea una nueva confirmación de fusión.
git pull --rebase <remote>
Al igual que en la anterior incorporación de cambios, en lugar de utilizar git merge
para integrar la rama remota en la local, usa git rebase
.
git pull --verbose
Proporciona una salida detallada durante una incorporación de cambios que muestra el contenido descargado y los detalles de la fusión.
Análisis de git pull
Puedes contemplar git pull
como una especie de svn update
en versión Git. Se trata de una forma sencilla de sincronizar tu repositorio local con los cambios anteriores. En el siguiente diagrama, se explica cada paso del proceso de incorporación de cambios.
Al principio piensas que tu repositorio está sincronizado, pero después git fetch
refleja que la versión de origen de la rama principal ha cambiado desde la última vez que la comprobaste. Luego, git merge
integra al instante la rama principal remota en la local.
Comando git pull y sincronización
git pull
es uno de los muchos comandos que se encargan de "sincronizar" el contenido remoto. El comando git remote
se utiliza para especificar los extremos remotos sobre los que operarán los comandos de sincronización. El comando git push
sirve para cargar contenido en un repositorio remoto.
El comando git fetch
puede confundirse con git pull
. Ambos se usan para descargar contenido remoto. Puede hacerse una importante distinción de seguridad entre git pull
y get fetch
. git fetch
puede considerarse la opción "segura" y git pull
la "no segura". git fetch
descargará el contenido remoto sin modificar el estado del repositorio local. En cambio, git pull
descargará el contenido remoto y tratará inmediatamente de cambiar el estado del repositorio local para reflejar ese contenido. De modo accidental, esto puede provocar que el repositorio local entre en conflicto.
Incorporación de cambios mediante la opción rebase
La opción --rebase
se puede usar para garantizar que el historial sea lineal evitando las confirmaciones de fusión innecesarias. Muchos desarrolladores prefieren esta opción antes que la fusión, porque es como decir "quiero que mis cambios prevalezcan sobre lo que han hecho los demás". En este sentido, usar git pull
con --rebase
se parece aún más a svn update
que a un simple git pull
.
De hecho, incorporar cambios con --rebase
es un flujo de trabajo tan común que hay una opción de configuración específica para él:
git config --global branch.autosetuprebase always
Después de ejecutar ese comando, se integrarán todos los comandos git pull
mediante git rebase
en lugar de git merge
.
Ejemplos de git pull
En los siguientes ejemplos, se muestra cómo usar git pull
en las situaciones más habituales:
Comportamiento predeterminado
git pull
La ejecución de la invocación predeterminada de git pull
equivale a git fetch origin HEAD
y git merge HEAD
, donde HEAD
es una referencia que apunta a la rama actual.
Comando git pull en los repositorios remotos
git checkout new_feature
git pull <remote repo>
En este ejemplo, primero se realiza una extracción del repositorio y se pasa a la rama git pull
transmitiendo git merge
.
Uso de la opción rebase con git pull en lugar de merge
En el siguiente ejemplo se muestra cómo realizar la sincronización con la rama principal del repositorio central mediante la opción de cambio de base:
git checkout main
git pull --rebase origin
Esto simplemente hace que tus cambios locales prevalezcan sobre lo que ya han hecho los demás.
Compartir este artículo
Tema siguiente
Lecturas recomendadas
Consulta estos recursos para conocer los tipos de equipos de DevOps o para estar al tanto de las novedades sobre DevOps en Atlassian.