Sinopsis
git fetch [<options>] [<remote> [<refspec>...]]
Descripción
El comando git fetch descarga nuevos commits, archivos y refs desde un repositorio remoto a tu repo local, pero NO los mergea en tu branch de trabajo. Tras hacer fetch, las refs de seguimiento remoto (como origin/main) se actualizan, y puedes inspeccionar lo nuevo con git log origin/main antes de decidir mergear o rebasear.
Hacer fetch es seguro: nunca modifica tu árbol de trabajo o branch actual. Muchos usuarios prefieren git fetch seguido de un git merge o git rebase explícito sobre git pull, porque da un paso de previsualización claro. Usa --all para hacer fetch desde cada remoto configurado.
En el uso diario, git fetch se integra con alias de shell. Para depurar, ejecuta con GIT_TRACE=1.
Entender cómo git fetch interactúa con el modelo de datos de Git rinde dividendos.
Opciones comunes
| Opción | Descripción |
|---|---|
--all | Hace fetch desde todos los remotos configurados. |
--prune / -p | Elimina refs de seguimiento remoto que ya no existen upstream. |
--tags | Descarga todos los tags del remoto. |
--depth=<n> | Limita la profundidad del historial descargado (crea/mantiene un clon shallow). |
--unshallow | Convierte un clon shallow en uno completo. |
--dry-run | Muestra lo que se descargaría. |
--force / -f | Permite actualizaciones no fast-forward de refs. |
Ejemplos
git fetch
# Actualiza refs de seguimiento remoto desde origin
git fetch --all --prune
# Actualiza desde cada remoto y limpia branches obsoletos
git fetch upstream main
# Descarga solo el branch main desde upstream
git fetch --unshallow
# Rellena el historial completo en un clon shallow
Errores comunes
Confundir git fetch con git pull es común: fetch solo descarga, mientras que pull descarga y mergea. Olvidar --prune deja una larga lista de branches de seguimiento obsoletos con el tiempo. Configura fetch.prune = true globalmente para hacer pruning automático.
Comandos relacionados
git pull, git merge, git remote, git ls-remote