Sinopsis
git gc [--auto] [--aggressive] [--prune=<date>]
Descripción
El comando git gc ('garbage collect') empaqueta objetos sueltos en archivos pack, elimina objetos inalcanzables más viejos que la ventana de prune, y expira entradas viejas del reflog. Mantiene el repo compacto y rápido.
Auto-gc se dispara automáticamente cuando se acumulan demasiados objetos sueltos. Ejecutar git gc manualmente es seguro pero rara vez necesario; --aggressive es CPU-pesado y rara vez vale la pena.
En el uso diario, este comando se integra estrechamente con alias de shell, plugins de editor e integración continua. Los usuarios avanzados a menudo añaden alias que combinan los flags que siempre pasan. El formato de salida puede personalizarse vía configuración de Git. Cuando algo sale mal, ejecuta el comando con GIT_TRACE=1 para revelar las llamadas plumbing subyacentes.
Entender cómo este comando interactúa con el resto del modelo de datos de Git rinde dividendos. Cada comando opera sobre algún subconjunto de las piezas (objetos, index, refs, árbol de trabajo), y saber cuáles toca ayuda a predecir resultados y a recuperarse de errores.
Opciones comunes
| Opción | Descripción |
|---|---|
--auto | Run only if Git's heuristics say maintenance is needed. |
--aggressive | Spend more time finding optimal deltas. |
--prune=<date> | Prune unreachable objects older than this. |
--no-prune | Skip pruning of loose objects. |
--quiet | Suppress progress output. |
--force | Run even if another gc is in progress. |
Ejemplos
git gc
# Routine maintenance
git gc --auto
# What Git runs in the background; safe to call manually
git gc --prune=now
# Aggressively reclaim space; deletes recent unreachables (use with care)
git gc --aggressive
# Slow, exhaustive repacking — rarely worth it
Errores comunes
--prune=now immediately deletes unreachable objects, possibly including ones still referenced by reflog or stash. Don't use it casually. Disabling automatic gc on a large repo lets loose objects accumulate; configure maintenance instead for newer Git.
Comandos relacionados
git maintenance, git repack, git prune, git fsck