Sinossi
git rm [-f] [-r] [--cached] [--] <file>...
Descrizione
Il comando git rm rimuove file dalla working tree e dall'index in un solo passo, mettendo in stage la cancellazione per il prossimo commit. Usare git rm è più comodo che rimuovere il file con rm e poi eseguire git add — anche se entrambi gli approcci producono lo stesso stato finale.
Il flag --cached è particolarmente utile: rimuove il file dall'index senza cancellarlo dalla working tree. Questo è lo strumento giusto quando hai accidentalmente committato un file (come un file di config con segreti, o un artefatto di build) e vuoi smettere di tracciarlo ma mantenerlo su disco.
Nell'uso quotidiano, git rm si integra con alias, editor e CI. Per il debug usa GIT_TRACE=1.
Capire come git rm interagisce con il modello dati di Git aiuta a prevedere i risultati e recuperare dagli errori.
Opzioni comuni
| Opzione | Descrizione |
|---|---|
-f, --force | Sovrascrive i controlli di sicurezza se il file ha modifiche non committate. |
-r | Rimuove ricorsivamente le directory. |
--cached | Rimuove solo dall'index; lascia stare il file nella working tree. |
-n, --dry-run | Mostra cosa verrebbe rimosso senza farlo. |
--ignore-unmatch | Esce zero anche se nessun file corrisponde. |
-q, --quiet | Sopprime l'output. |
Esempi
git rm old-file.txt
# Cancella il file e mette in stage la cancellazione
git rm -r build/
# Rimuove ricorsivamente una directory dal repo
git rm --cached secrets.env
# Smette di tracciare un file ma lo mantiene localmente
# Poi aggiungilo a .gitignore!
git rm -n '*.log'
# Anteprima di quali file di log verrebbero rimossi
Errori comuni
Il problema più grosso è dimenticare che git rm --cached ferma solo il tracking futuro — i commit passati contengono ancora il file. Se hai bisogno di eliminare un segreto dalla storia, usa git filter-repo o BFG. Un altro errore è eseguire git rm su un file con modifiche non in stage senza rendersi conto che quelle modifiche sono perse. Usa prima -n in caso di dubbio.
Comandi correlati
git add, git mv, git restore, git filter-repo