W3docs

git pull

En esta página encontrarás información útil sobre el comando git pull, su uso, las opciones más comunes y consejos importantes al respecto.

Qué hace git pull

git pull descarga nuevos commits de un repositorio remoto y los integra inmediatamente en tu rama local actual. Es el comando que ejecutas para sincronizar tu trabajo con lo que tus compañeros han subido.

Internamente, git pull es un atajo conveniente para dos comandos ejecutados uno tras otro:

git fetch <remote>          # download the new commits
git merge <remote>/<branch> # integrate them into the current branch

Así que git pull equivale a git fetch seguido de git merge. Entender esa separación es la clave para comprender el comando completo: fetch actualiza tus ramas de seguimiento remotas sin tocar tu trabajo, y merge (o rebase, véase más abajo) reproduce la nueva historia en tu rama.

gitpull

Cuándo usarlo

git pull forma parte del flujo de trabajo de "sincronización" de Git, junto con git push, git fetch y git remote. Úsalo siempre que quieras que tu rama local refleje el estado más reciente del remoto, por ejemplo:

  • Antes de comenzar un nuevo trabajo, para que construyas sobre el código más actualizado.
  • Antes de ejecutar git push, para que tu push avance en modo fast-forward en lugar de ser rechazado como "non-fast-forward".
  • Para recoger los commits de un compañero en una rama compartida.

git fetch y git pull descargan contenido remoto, pero difieren en un aspecto importante: git fetch solo actualiza tus ramas de seguimiento remotas y deja tu copia de trabajo intacta, mientras que git pull también fusiona esos cambios en tu rama actual. Si quieres inspeccionar los commits entrantes antes de integrarlos, haz fetch primero y fusiona tú mismo.

Cómo funciona la fusión durante un pull

Supongamos que tu rama local y el remoto comparten la historia hasta el commit E y luego divergen. El remoto ha ganado los commits A, B y C que tú no tienes. Al ejecutar git pull se obtienen esos commits.

gitpull1

Git crea entonces un nuevo commit de fusión, H, que une tu trabajo local con los commits obtenidos A, B y C, combinando ambas líneas de historia.

gitpull2

Si tu rama local no ha divergido (no tienes nuevos commits locales), Git simplemente mueve el puntero de tu rama hacia adelante hasta los nuevos commits. Esto se llama fast-forward y no produce ningún commit de fusión.

Con la opción --rebase, Git reproduce tus commits locales sobre los commits obtenidos en lugar de crear un commit de fusión, manteniendo la historia lineal.

gitpull3

Opciones comunes

ComandoDescripción
git pull <remote>Obtiene el contenido remoto y lo fusiona directamente en la copia local (equivalente a git fetch <remote> seguido de git merge <remote>/<current-branch>).
git pull --no-commit <remote>Obtiene y fusiona, pero se detiene antes de crear el commit de fusión para que puedas inspeccionar el resultado primero.
git pull --rebase <remote>Hace rebase de tus commits locales sobre los commits obtenidos en lugar de fusionarlos, manteniendo la historia lineal.
git pull --ff-onlyActualiza solo si la fusión puede ser un fast-forward; de lo contrario, aborta sin modificar tu rama.
git pull --verboseProporciona salida detallada, mostrando el contenido descargado y los detalles de la fusión durante el pull.

Ejemplos

Pull desde la rama upstream

Invocar git pull sin argumentos obtiene y fusiona los cambios de la rama upstream configurada para la rama actual:

git pull

Para que esto funcione, la rama actual debe tener configurado un upstream (Git lo almacena después del primer git push -u o git branch --set-upstream-to).

Pull desde un remoto y rama específicos

Puedes nombrar el remoto y la rama de forma explícita:

git pull <remote> <branch>

Esto obtiene y fusiona los cambios de la rama especificada del remoto indicado. Por ejemplo, para hacer pull de la rama develop desde el remoto origin:

git pull origin develop

Pull con rebase

git pull --rebase

En lugar de fusionar, esto reproduce tus commits locales sobre los commits obtenidos. El resultado es una historia lineal sin commit de fusión, que muchos equipos prefieren para las ramas de funcionalidades. Para que esto sea el comportamiento predeterminado de una rama, configura git config pull.rebase true. Consulta git rebase para conocer las ventajas e inconvenientes.

Pull sin confirmar la fusión

git pull --no-commit

Esto obtiene y fusiona, pero se detiene justo antes de crear el commit de fusión, dejando el resultado preparado para que puedas revisarlo (y modificarlo) antes de confirmar con git commit.

Resolución de conflictos tras un pull

Si los commits remotos modificaron las mismas líneas que tú cambiaste localmente, la fusión no puede completarse automáticamente y Git reporta un conflicto:

Auto-merging app.js
CONFLICT (content): Merge conflict in app.js
Automatic merge failed; fix conflicts and then commit the result.

Para resolverlo, abre cada archivo en conflicto, edítalo para conservar el contenido correcto (eliminando los marcadores <<<<<<<, ======= y >>>>>>>), luego prepara y confirma los cambios:

git add app.js
git commit

Si prefieres no lidiar con el conflicto en este momento, git merge --abort devuelve tu rama al estado anterior al pull.

Nota

Hacer pull sobre una rama con cambios locales sin confirmar puede fallar porque Git se niega a sobrescribir tu trabajo. Confirma o usa git stash para guardar tus cambios antes de hacer pull y luego recupéralos después.

Práctica

Práctica
¿Cuáles de las siguientes afirmaciones sobre el comando 'git pull' son verdaderas?
¿Cuáles de las siguientes afirmaciones sobre el comando 'git pull' son verdaderas?
Was this page helpful?