Por Anónimo (no verificado) , 29 Abril 2026

Sinopsis

git filter-repo --path <path> [--invert-paths]
git filter-repo --replace-text <file>
git filter-repo --strip-blobs-bigger-than 10M

Descripción

git filter-repo es una herramienta de tercera parte (recomendada por el proyecto Git sobre el deprecado git filter-branch) para reescrituras a gran escala del historial: eliminar archivos, cambiar autores, eliminar branches, etc. Es órdenes de magnitud más rápida que filter-branch y más segura por defecto.

Usos comunes incluyen quitar archivos sensibles del historial, fusionar repos, y dividir un subdirectorio en su propio repo. Siempre opera sobre un clon fresco como protección, ya que cambia los SHAs de todos los commits.

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ónDescripción
--path <p>Keep only the specified path.
--invert-pathsInverse: remove the specified paths.
--path-glob <g>Use a glob pattern.
--replace-text <file>Replace strings throughout history.
--strip-blobs-bigger-than <size>Drop large blobs.
--mailmap <file>Rewrite author/committer info.
--analyzeProduce a report on repo size before rewriting.
--forceOverride the fresh-clone safety check.

Ejemplos

git filter-repo --analyze
# Inspect what's eating space

git filter-repo --path docs/ --invert-paths
# Remove docs/ from all history

git filter-repo --strip-blobs-bigger-than 50M
# Purge any file over 50 MB

echo 'API_KEY==>REDACTED' > replacements.txt
git filter-repo --replace-text replacements.txt
# Scrub a leaked secret

Errores comunes

Running filter-repo in your live repo without a backup risks losing data. Always clone fresh. After rewriting, force-push and have collaborators re-clone — anyone with old SHAs will get conflicts. The tool removes origin by default to prevent accidental pushes; re-add it deliberately.

Comandos relacionados

git filter-branch (deprecated), git gc, git reflog, git push --force-with-lease