Dos de los comandos más utilizados en Git para sincronizar el repositorio local con el remoto son git fetch y git pull. Aunque ambos sirven para actualizar el repositorio local con los cambios del repositorio remoto, tienen diferencias clave en su funcionamiento y en el impacto que tienen sobre el entorno de trabajo.
Seguid leyendo y os mostraré las diferencias entre git fetch y git pull además de aprender cuándo usar uno u otro...
¿QUÉ ES GIT?
Git es un programa que nos ayuda a guardar y controlar los cambios que hacemos con nuestros archivos y proyectos. Pensad en Git como una especie de máquina del tiempo para vuestro código: cada vez que guardáis (en Git se llama hacer un "commit"), Git recuerda cómo estaban vuestros archivos en ese momento. Si más adelante os equivocáis o queréis volver atrás, Git os dejará viajar a versiones anteriores.
¿Para qué sirve?
- Guardar un historial completo de lo que has hecho en tu proyecto.
- Volver a cualquier versión anterior si algo sale mal.
- Trabajar con más personas al mismo tiempo sin pisarse los cambios.
- Probar cosas nuevas sin miedo, porque puedes regresar al punto de partida.
Web Oficial: https://git-scm.com/
Git es distribuido, no centralizado.
1.- ELEMENTOS NECESARIOS PARA ESTE TUTORIAL
- Un equipo cualquiera con Windows, GNU/Linux o MacOS
- GIT instalado
- Un servidor de Git, por ejemplo, GitHub
- Internet es recomendado
2.- ¿QUÉ ES GIT FETCH?
git fetch es un comando de Git que nos permite descargar los cambios más recientes desde el repositorio remoto, pero sin mezclarlos automáticamente con nuestra rama local. En otras palabras, git fetch actualiza nuestra copia local de las referencias remotas (como origin/main), pero no toca nuestro código actual ni tampoco nuestro historial local.
Funciones principales:
- Descarga los commits, etiquetas (tags) y referencias actualizadas desde el repositorio remoto.
- Nos permite revisar qué ha cambiado antes de aplicar esos cambios a nuestro trabajo local.
- No altera el working directory (nuestro código actual).
3.- ¿QUÉ ES GIT PULL?
git pull es un comando de Git que se utiliza para descargar y fusionar automáticamente los cambios desde un repositorio remoto a nuestra rama local. En pocas palabras, es una combinación de dos comandos (git fetch + git merge):
Función principal
- Descarga los commits más recientes desde el remoto.
- Realiza automáticamente un merge entre la rama remota y nuestra rama local actual.
- Si existen conflictos entre lo remoto y lo local, Git nos pedirá que los resolvamos.
4.- DIFERENCIAS ENTRE GIT FETCH Y GIT PULL
En la siguiente tabla, os muestro la comparativa de las diferencias entre git fetch y git pull.
Acción |
git fetch |
git pull |
Descarga de cambios remotos |
✅ Sí |
✅ Sí |
Realiza merge automático |
❌ No |
✅ Sí |
Modifica el working directory |
❌ No |
✅ Sí |
Recomendado para revisión previa |
✅ Sí |
❌ No |
Riesgo de conflictos |
Bajo |
Medio/Alto |
5.- CUANDO USAR GIT FETCH Y GIT PULL
En función de lo que queramos realizar, será mejor utilizar git fetch o git pull. En la tabla siguiente os indico cual es mejor para cada caso:
Situación |
¿Qué usar? |
Por qué |
Queremos ver qué hay de nuevo sin tocar nuestro código |
git fetch |
Seguro, no modifica archivos. |
Queremos estar seguros de traer e integrar cambios |
git pull |
Directo, rápido. |
Cuando trabajamos con muchas ramas al mismo tiempo |
git fetch |
Así puedes revisar cualquier rama sin cambiarte. |
Queremos el máximo control sobre conflictos |
git fetch + merge o rebase |
Tú decides cómo se integra. |
Cuando tenemos prisa o trabajamos solos |
git pull |
Menos comandos. |
6.- EJEMPLOS DE GIT FETCH Y GIT PULL
A continuación, os pongo varios escenarios en el uso de git fetch y git pull
6.1.- TRABAJAMOS EN EQUIPO Y QUEREMOS REVISAR ANTES DE ACTUALIZAR (CASO SEGURO)
Este caso se aplica cuando por ejemplo tenemos código sin guardar o cambios sin commitear. Antes de hacer cualquier fusión, queremos ver qué es lo que hizo nuestro equipo. Para ello ejecutaremos el comando siguiente:
raul@debian:~/mirepo$ git fetch origin
¿Qué hace el comando anterior?
- Git se conecta al remoto llamado origin.
- Descarga los nuevos commits, pero no los mezcla con nuestro código local.
- Nuestro código sigue igual.
Luego, si nos interesa, podemos revisar el historial remoto actualizado sin modificar nuestro propio directorio de trabajo con el comando:
raul@debian:~/mirepo$ git log origin/main
6.2.- SABEMOS QUE EL CÓDIGO ES SEGURO Y QUEREMOS SINCRONIZAR (CASO RÁPIDO)
Por ejemplo, sabemos que nuestro compañero subió código al repositorio y sabemos que no hay conflictos porque nosotros no hemos modificado nada. Entonces, ejecutaremos simplemente un git pull:
raul@debian:~/mirepo$ git pull origin main
¿Qué hace el comando anterior?
- Descarga y mezcla los cambios automáticamente en nuestra rama main.
- Si no hay conflictos, todo se actualiza.
- Si hay conflictos, Git nos pedirá resolverlos.
6.3.- QUEREMOS BAJAR LAS ACTUALIZACIONES, PERO ESTAMOS EN OTRA RAMA
Si por ejemplo estamos en una rama llamada feature/nueva-funcion y queremos ver qué hay de nuevo en la rama main, sin afectar a nuestra rama actual, ejecutaremos:
raul@debian:~/mirepo$ git fetch origin
¿Qué hace el comando anterior?
- Descargamos actualizaciones de main, desarrollo, y otras ramas que tengamos creadas.
- Nuestra rama actual (feature/nueva-funcion) no cambia.
Si queremos comparar, podemos utilizar:
raul@debian:~/mirepo$ git diff feature/nueva-funcion origin/main
6.4.- TRABAJAMOS EN PRODUCCIÓN Y QUEREMOS EL MÁXIMO CONTROL DEL MERGE
Si vamos a actualizar el servidor de producción, pero preferimos revisar, hacer un backup y luego aplicar los cambios ejecutaremos:
raul@debian:~/mirepo$ git fetch origin
raul@debian:~/mirepo$ git merge origin/main
¿Qué hace el comando anterior?
- Descarga los cambios.
- Git nos deja revisar y hacer el merge manualmente.
- Podemos resolver conflictos a nuestro ritmo.
6.5.- TRABAJAMOS SOLOS Y QUEREMOS ACTUALIZAR RÁPIDO
Si somos el único desarrollador y queremos descargar los cambios recientes desde el servidor remoto ejecutaremos:
raul@debian:~/mirepo$ git pull origin main
¿Qué hace el comando anterior?
- Descarga y fusiona en un solo paso.
- No hay riesgo de conflictos (porque nadie más toca el código).
ENJOY!