Close

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.

Ventana de consola
Material relacionado

Git log avanzado

Logotipo de Bitbucket
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.

Repositorio de git central a repositorio de git local

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.

git pull

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 . Después, se ejecuta git pull transmitiendo . De este modo, se incorporará implícitamente la rama newfeature de . Una vez finalizada la descarga, se iniciará un 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

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.

Gente que colabora utilizando un muro lleno de herramientas

Blog de Bitbucket

Ilustración de Devops

Ruta de aprendizaje de DevOps

Demostraciones de funciones con expertos de Atlassian del Centro de demostraciones

Cómo funciona Bitbucket Cloud con Atlassian Open DevOps

Suscríbete para recibir el boletín de DevOps

Thank you for signing up