git fetch

Compartir y actualizar

Descargar objetos y referencias de otro repositorio


El comando 'git fetch' descarga commits, archivos y referencias de un repositorio remoto a tu repositorio local. Te permite ver en qué han trabajado los demás sin integrar esos cambios en tus ramas locales. A diferencia de 'git pull', fetch es seguro: nunca cambia tu directorio de trabajo ni tu rama actual. Después del fetch puedes revisar los cambios y decidir si integrarlos.

Sinopsis

git fetch [<options>] [<repository> [<refspec>...]]
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)...]
git fetch --all [<options>]
[ ] opcional| o<arg> valor a sustituir... repetible--flag opción

Opciones

Haz clic en una opción para desplegarla

Principiante (4)

Hacer fetch de todos los remotos configurados a la vez. Útil cuando tienes varios remotos, como origin y upstream.

Cuando haga faltaÚtil con varios remotos (fork + upstream); un fetch normal cubre solo uno

Ejemplo

git fetch --all

Antes del fetch, quitar las ramas de seguimiento remoto que ya no existen en el remoto. Mantiene limpio tu repositorio.

RecomendadoElimina las referencias origin/* obsoletas de ramas borradas en el remoto

Ejemplo

git fetch --prune

Traer todas las etiquetas del remoto, además de lo que se traería de todos modos. Útil para obtener las etiquetas de release.

Cuando haga faltaLas etiquetas de los commits traídos ya llegan; úsalo para etiquetas de otro historial

Ejemplo

git fetch --tags

Mostrar qué se haría, sin cambiar nada. Útil para ver de antemano qué descargará fetch.

Cuando haga faltaPrevisualiza qué referencias se actualizarían sin cambiar nada

Ejemplo

git fetch --dry-run

Intermedio (1)

Limitar el fetch al número de commits indicado desde la punta de cada rama remota. En un clon superficial, amplía o recorta el historial.

Cuando haga faltaAhorra tiempo en CI o en repositorios enormes, pero un historial superficial limita log y merge-base

Ejemplo

git fetch --depth=1

Elegir la opción adecuada

Fetch frente a pull

Entender la diferencia clave entre fetch y pull

ComandoDescarga commitsActualiza la rama localSeguro en cualquier momento
git fetchSíNo: solo las de seguimiento remotoSí: nunca cambia el directorio de trabajo
git pullSíSí: integra en la actualCuidado: puede causar conflictos
git pull --rebaseSíSí: hace rebase de la actualCuidado: reescribe los commits locales

Opciones de fetch para limpiar

Opciones para mantener ordenado tu repositorio

ComandoQuita ramas obsoletasTrae etiquetasCaso de uso
git fetchNoAlgunas (alcanzables)Actualización normal
git fetch --pruneSíAlgunas (alcanzables)Limpiar ramas borradas
git fetch --tagsNoTodas las etiquetasTraer las etiquetas de release
git fetch --prune --tagsSíTodas las etiquetasLimpiar ramas + traer todas las etiquetas (se conservan las locales)

Alcance del fetch

Controlar qué se descarga

ComandoDescarga desdeIdeal para
git fetchRemoto por defecto (origin)Uso más habitual
git fetch originUn remoto concretoCuando tienes varios remotos
git fetch --allTodos los remotosSincronizar un fork con upstream
git fetch origin mainSolo una ramaDescarga mínima

Ejemplos

Fetch del remoto por defecto

git fetch

Descarga los commits nuevos del remoto por defecto (normalmente 'origin') sin integrarlos.


Fetch de un remoto concreto

git fetch origin

Hacer fetch explícitamente del remoto 'origin'.


Fetch de todos los remotos

git fetch --all

Hacer fetch de todos los remotos configurados a la vez.


Fetch y poda de ramas obsoletas

git fetch --prune

Hacer fetch y quitar las ramas de seguimiento remoto que ya no existen en el remoto.

Ejemplos de flujos de trabajo

1
git fetch origin

Descargar los cambios remotos sin integrarlos

2
git log main..origin/main

Ver los commits del remoto que no están en tu rama local

3
git diff main...origin/main

Revisar los cambios de código hechos en el remoto

4
git merge origin/main

Integrar cuando estés listo

1
git remote add upstream <original-repo-url>

Añadir el repositorio original como upstream (una sola vez)

2
git fetch upstream

Traer lo último del repositorio original

3
git checkout main

Cambiarse a tu rama main

4
git merge upstream/main

Integrar los cambios de upstream en tu fork

5
git push origin main

Subir el fork actualizado a tu GitHub

1
git fetch --prune

Hacer fetch y quitar las ramas de seguimiento remoto obsoletas

2
git branch -vv

Ver las ramas locales y su estado de seguimiento

3
git branch -d old-feature

Borrar las ramas locales que seguían a remotas borradas

Solución de problemas

fatal: 'origin' does not appear to be a git repository

Causa: No hay ningún remoto llamado 'origin' configurado

Revisa los remotos con 'git remote -v'. Añade uno con 'git remote add origin <url>'

Hice fetch pero mi rama local no se actualizó

Causa: Fetch solo actualiza las ramas de seguimiento remoto, no las locales

¡Es lo esperado! Ejecuta 'git merge origin/main' o 'git pull' para actualizar tu rama local

error: cannot lock ref - unable to update local ref

Causa: Una referencia de seguimiento remoto obsoleta choca con un nombre de rama nuevo (p. ej. 'feature' frente a 'feature/login')

Ejecuta 'git remote prune origin' o 'git fetch --prune' para quitar las referencias obsoletas y vuelve a hacer fetch

Sigo viendo ramas remotas borradas

Causa: Hay que podar las ramas de seguimiento remoto obsoletas

Usa 'git fetch --prune' o 'git remote prune origin'

El fetch es muy lento o descarga demasiado

Causa: Estás trayendo todo el historial cuando solo necesitas los commits recientes

Usa 'git fetch --depth=1' para un fetch superficial, o trae solo una rama concreta

Consejos y trampas

Buenas prácticas

  • ✓Haz fetch antes de empezar a trabajar para ver si hay cambios remotos que debas conocer
  • ✓Usa --prune a menudo para mantener tu repositorio libre de ramas obsoletas
  • ✓Mejor fetch + merge que pull cuando quieras revisar los cambios antes de integrarlos
  • ✓Configura 'git config fetch.prune true' para podar siempre al hacer fetch
  • ✓Usa 'git fetch --all' cuando trabajes con forks para sincronizar a la vez origin y upstream

Errores comunes

  • ✗Esperar que fetch actualice tu directorio de trabajo: solo actualiza las ramas de seguimiento remoto, no tus ramas locales.
  • ✗Olvidar hacer merge o rebase tras el fetch: fetch descarga, pero no integra los cambios.
  • ✗No usar --prune a menudo, con lo que las ramas de seguimiento remoto obsoletas llenan tu repositorio.
  • ✗Confundir fetch con pull: pull = fetch + merge, mientras que fetch es solo el paso de descarga.

Preguntas frecuentes

A:

Fetch descarga commits, pero no cambia tus ramas locales. Pull = fetch + merge (o rebase). Fetch es más seguro porque te deja revisar los cambios antes de integrarlos.

A:

Fetch solo actualiza las ramas de seguimiento remoto (como origin/main), no tus ramas locales. Necesitas hacer merge o rebase para actualizar tu rama local.

A:

Usa 'git log main..origin/main' para ver los commits del remoto que no están en tu rama local, o 'git diff main...origin/main' para ver los cambios de código hechos en el remoto.

A:

Fetch cuando quieras revisar antes los cambios o trabajes en ramas importantes. Pull para actualizaciones rápidas cuando confías en los cambios que llegan.

A:

Usa 'git fetch origin branch-name' para traer solo esa rama. Útil en repositorios grandes donde no necesitas todo.

A:

Quita las ramas de seguimiento remoto que ya no existen en el remoto. Mantiene limpio tu repositorio cuando tus compañeros borran ramas integradas.