git-filter-repo es una herramienta de línea de comandos escrita en Python, creada por Elijah Newren, diseñada para reescribir el historial de repositorios Git de forma rápida, segura y versátil. Funciona como sustituto recomendado de git filter-branch, cuya lentitud, errores silenciosos y dificultad de uso han llevado al propio proyecto Git a desaconsejarlo.
El proyecto se distribuye como un único script Python, lo que facilita su instalación: basta con colocarlo en el $PATH. Sus únicos requisitos son git 2.36.0 o superior y Python 3.6 o superior. Para usos avanzados existe documentación completa, manuales en HTML, hojas de referencia que traducen comandos de filter-branch y BFG Repo Cleaner, y un FAQ.
En su núcleo, filter-repo ofrece una librería que permite crear herramientas personalizadas de reescritura de historial, algo especialmente útil para casos no triviales. Frente a filter-branch, es entre varios órdenes de magnitud más rápido, evita las trampas que pueden corromper silenciosamente el historial y resulta mucho más cómodo de invocar. Frente a BFG Repo Cleaner, supera sus limitaciones para tipos de reescritura más complejos, manteniendo su sencillez para los casos básicos.
Un ejemplo habitual es extraer un subdirectorio de un repositorio para fusionarlo en otro: filter-repo permite aislar la carpeta src/, renombrar archivos con un prefijo my-module/ y anteponer 'my-module-' a las etiquetas, todo con un único comando. Operaciones equivalentes con filter-branch requieren filtros de árbol complejos y con BFG resultan directamente imposibles.
