Da Anonimo (non verificato) , 29 Aprile 2026

Sinossi

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

Descrizione

Lo strumento git filter-repo è il modo moderno e raccomandato per riscrivere la storia Git. Sostituisce il deprecato git filter-branch, che è lento e soggetto a errori. filter-repo può eliminare file grandi, rimuovere dati sensibili (credenziali committate per errore), ristrutturare path, riscrivere autori via mailmap o estrarre sottodirectory nel proprio repository.

È distribuito separatamente dal Git core (tipicamente via pip install git-filter-repo o il tuo gestore di pacchetti). Le operazioni sono distruttive — lavora sempre su un clone fresco e coordinati con i collaboratori perché ogni SHA cambia.

Nell'uso quotidiano, git filter-repo si integra con alias e CI.

Capire il modello dati di Git aiuta a prevedere i risultati.

Opzioni comuni

OpzioneDescrizione
--path <p>Mantiene solo il path specificato.
--invert-pathsInverso: rimuove i path specificati.
--path-glob <g>Usa un pattern glob.
--replace-text <file>Sostituisce stringhe in tutta la storia.
--strip-blobs-bigger-than <size>Elimina blob grandi.
--mailmap <file>Riscrive info author/committer.
--analyzeProduce un report sulla dimensione del repo prima della riscrittura.
--forceSovrascrive il controllo di sicurezza fresh-clone.

Esempi

git filter-repo --analyze
# Ispeziona cosa sta consumando spazio

git filter-repo --path docs/ --invert-paths
# Rimuove docs/ da tutta la storia

git filter-repo --strip-blobs-bigger-than 50M
# Elimina qualsiasi file sopra 50 MB

echo 'API_KEY==>REDACTED' > replacements.txt
git filter-repo --replace-text replacements.txt
# Cancella un segreto trapelato

Errori comuni

Eseguire filter-repo nel tuo repo live senza un backup rischia di perdere dati. Clona sempre fresh. Dopo la riscrittura, fai force-push e fai re-clone ai collaboratori — chiunque abbia vecchi SHA otterrà conflitti. Lo strumento rimuove origin per default per prevenire push accidentali; aggiungilo di nuovo deliberatamente.

Comandi correlati

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