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

Por qué filter-repo

git filter-repo es el reemplazo moderno del obsoleto git filter-branch. Es dramáticamente más rápido — a veces 100x — más seguro por defecto, y proporciona las operaciones de alto nivel que la cirugía de historia realmente necesita: eliminar archivos, renombrar rutas, eliminar autores, dividir subdirectorios y cambiar emails en todos los commits.

Instalación

filter-repo no viene incluido con Git pero está ampliamente empaquetado. En macOS: brew install git-filter-repo. En Debian/Ubuntu: apt install git-filter-repo.

Eliminar un archivo de toda la historia

git filter-repo --path secrets.env --invert-paths

Esto reescribe cada commit que tocó secrets.env para omitir el archivo, luego poda los objetos huérfanos. Haz force-push del resultado y rota cualquier credencial filtrada inmediatamente.

Extraer un subdirectorio como nuevo repo

git clone --no-local original/ extracted/
cd extracted
git filter-repo --subdirectory-filter packages/foo

Renombrar rutas

git filter-repo --path-rename old/dir/:new/dir/

Actualizar emails de autor

cat > mailmap.txt <<'EOF'
Jane Doe <[email protected]> <[email protected]>
EOF
git filter-repo --mailmap mailmap.txt

Características de seguridad

filter-repo se niega a ejecutarse en un clone no fresco por defecto. Anula solo cuando entiendas las implicaciones:

git filter-repo --force

Errores comunes

Ejecutar en tu único clone con --force y sin backup. Siempre clona primero. Olvidar que filter-repo elimina el remote original para prevenir pushes accidentales — vuelve a añadirlo explícitamente.

Rendimiento

filter-repo hace streaming vía git fast-export/fast-import. Para repos muy grandes, ejecuta en un SSD rápido y aumenta core.bigFileThreshold si tienes problemas de memoria.