La gestione della rimozione dei file in Git non si limita a cancellarli dal file system: occorre infatti aggiornare anche l’indice (staging area) affinché il VCS tenga traccia della loro eliminazione. A questo scopo si utilizza il comando git rm, che rimuove un file sia dalla working directory sia dall’area di staging, garantendo così che il cambiamento venga registrato nel prossimo commit.
Se invece un file viene eliminato manualmente dal file system (ad esempio con rm nomefile in Linux/Mac o del nomefile in Windows), Git rileverà la cancellazione come una modifica non tracciata e la segnalerà con lo stato deleted nel comando git status. In questo scenario, per allineare il repository occorre esplicitamente eseguire:
git rm nomefile
git commit -m "Remove nomefile"
![]() |
FIG 1 - git rm |
Opzioni principali di git rm
- git rm file
Rimuove il file dalla working directory e dall’indice, pronto per essere eliminato con il commit successivo. - git rm -f file (force)
Utilizzato quando il file modificato o già in staging non può essere rimosso normalmente. Serve a prevenire la perdita di dati non ancora salvati in un commit. - git rm -r nomecartella
Rimuove la cartella dalla working directory e dall’indice. La cartella e i file contenuti verranno eliminati con il commit successivo. - git rm --cached file
Rimuove il file solo dall’indice, mantenendolo nel file system locale. È utile quando si vogliono escludere file già tracciati (ad esempio log, binari o configurazioni locali) che dovrebbero essere ignorati in futuro tramite .gitignore. - Supporto a directory e pattern
È possibile passare intere cartelle o utilizzare glob patterns:
git rm log/\*.log # rimuove tutti i file .log in log/
git rm *~ # rimuove tutti i file temporanei terminanti con ~
Attenzione: occorre fare escaping (\*) se si vuole che il pattern venga interpretato da Git e non dalla shell.
Tabella di confronto: modalità di rimozione
Comando | Effetto sul file system | Effetto sull’indice (staging) | Caso d’uso tipico |
---|---|---|---|
rm file / del file |
Elimina il file solo dal disco | Segnalato come deleted ma non ancora tracciato | Eliminazione manuale, da completare con git rm |
git rm file |
Elimina dal disco e dall’indice | File rimosso e pronto al commit | Rimozione standard di file tracciati |
git rm -r cartella |
Elimina dal disco e dall’indice | Cartella rimossa e pronto al commit | Rimozione standard di cartelle tracciate |
git rm -f file |
Forza l’eliminazione anche se modificato | File rimosso forzatamente | Prevenire conflitti con file non ancora committati |
git rm --cached file |
Mantiene il file nel disco | Rimosso dall’indice | Escludere file dal versionamento (es. log, build, config locali) |
git rm pattern (es. *.log ) |
Elimina più file secondo il pattern | Tutti i file corrispondenti rimossi | Pulizia massiva di file generati automaticamente |
Best practice
- Prima di utilizzare git rm -f, verificare se le modifiche devono essere salvate: in caso positivo, effettuare un commit preventivo.
- Utilizzare git rm --cached in combinazione con un aggiornamento del .gitignore, per evitare di reintrodurre accidentalmente file indesiderati.
- Per rimuovere directory intere, aggiungere l’opzione -r (git rm -r nomecartella).
- In ambienti Windows, ricordare che del elimina il file solo dal disco: per rimuoverlo correttamente dal repository è necessario seguire con git rm.
Nessun commento:
Posta un commento
I messaggi sono soggetti a moderazione da parte dell'amministratore prima della loro pubblicazione.