git rm
Una domanda comune quando si inizia a usare Git è: "Come faccio a indicare a Git di non tenere più traccia di uno o più file?". Il comando git rm
viene utilizzato per rimuovere file da un repository Git. Può essere considerato l'inverso del comando git add.
Panoramica di git rm
Il comando git rm
può essere usato per rimuovere singoli file o una raccolta di file. La funzione principale di git rm
è rimuovere i file tracciati dall'indice Git. Inoltre, git rm
può essere usato per rimuovere file sia dall'indice di staging che dalla directory di lavoro. Non è possibile rimuovere un file solo dalla directory di lavoro. I file su cui si opera devono essere identici ai file presenti nell'attuale HEAD
. Se c'è una discrepanza tra la versione HEAD
di un file e l'indice temporaneo o la versione dell'albero di lavoro, Git bloccherà la rimozione. Questo blocco è un meccanismo di sicurezza per impedire la rimozione delle modifiche in corso.
Nota che git rm
non rimuove i branch. Scopri di più sull'uso di branch git
Utilizzo
<file>…
Specifica i file di destinazione da rimuovere. Il valore dell'opzione può essere un singolo file, un elenco di file delimitato da spazi file1, file2, file3
) o un file con caratteri jolly (~. /directory/*)
.
-f
--force
L'opzione -f
viene utilizzata per sovrascrivere il controllo di sicurezza effettuato da Git per assicurarsi che i file in HEAD
corrispondano al contenuto corrente nell'indice di staging e nella directory di lavoro.
materiale correlato
Scheda di riferimento rapido di Git
Scopri la soluzione
Impara a utilizzare Git con Bitbucket Cloud
-n
--dry-run
L'opzione "dry run" è una protezione che eseguirà il comando git rm
ma non eliminerà effettivamente i file. Mostrerà invece quali file avrebbe rimosso.
-r
L'opzione -r
è l'abbreviazione di «ricorsivo». Quando si opera in modalità ricorsiva git rm
rimuoverà una directory di destinazione e tutto il contenuto di quella directory.
--
L'opzione separatore viene utilizzata per distinguere esplicitamente tra un elenco di nomi di file e argomenti passati a git rm
. È utile se alcuni dei nomi di file hanno una sintassi che potrebbe essere confusa con altre opzioni.
--cached
L'opzione cached specifica che la rimozione deve avvenire solo sull'indice di staging. I file della directory di lavoro non verranno toccati.
--ignore-unmatch
Questo fa uscire il comando con lo stato 0 sigterm anche se nessun file corrisponde. Si tratta di un codice di stato a livello Unix. Il codice 0 indica l'avvenuta invocazione del comando. L'opzione --ignore-unmatch
può essere utile quando si utilizza git rm
come parte di uno script di shell più ampio che deve fallire in modo previsto.
-q
--quiet
L'opzione quiet nasconde l'output del comando git rm
. Il comando normalmente emette una riga per ogni file rimosso.
Come annullare git rm
L'esecuzione di git rm
non è un aggiornamento permanente. Il comando aggiornerà l'indice di staging e la directory di lavoro. Queste modifiche non saranno persistenti finché non verrà creato un nuovo commit e le modifiche non verranno aggiunte alla cronologia dei commit. Ciò significa che le modifiche qui possono essere "annullate" utilizzando i comuni comandi Git.
git reset HEAD
Una reimpostazione ripristinerà l'indice temporaneo e la directory di lavoro correnti al commit HEAD
. Ciò annullerà git rm
.
git checkout .
Un checkout avrà lo stesso effetto e ripristinerà l'ultima versione di un file da HEAD
.
Nel caso in cui git rm
sia stato eseguito e sia stato creato un nuovo commit che persiste dopo la rimozione, git reflog
può essere usato per trovare un riferimento precedente all'esecuzione di git rm
. Scopri di più sull'uso di git reflog.
Discussione
L'argomento <file
dato al comando può essere costituito da percorsi esatti, schemi globali dei file con caratteri jolly o nomi esatti di directory. Il comando rimuove solo i percorsi attualmente salvati nel repository Git.
La globalizzazione dei file con caratteri jolly mantiene la corrispondenza nelle varie directory. È importante essere cauti quando si usano i globi jolly. Considera gli esempi: directory/*
e directory*
. Il primo esempio rimuoverà tutti i file secondari di directory/
mentre il secondo esempio rimuoverà tutte le directory di pari livello come directory1
directory2
directory_qualsiasi
, il che potrebbe essere un risultato inaspettato.
L'ambito di git rm
Il comando git rm
funziona solo sul branch corrente. L'evento di rimozione si applica solo agli alberi delle directory di lavoro e degli indici di staging. La rimozione del file non viene mantenuta nella cronologia del repository fino alla creazione di un nuovo commit.
Perché usare git rm invece di rm
Un repository Git riconoscerà quando un normale comando rm
della shell viene eseguito su un file che sta monitorando e aggiornerà la cartella di lavoro in base alla rimozione. Non aggiornerà l'indice di staging con la rimozione. Un comando git add
aggiuntivo dovrà essere eseguito sui percorsi dei file rimossi per aggiungere le modifiche all'indice di staging. Il comando git rm
funge da scorciatoia poiché aggiornerà la directory di lavoro e l'indice di staging con la rimozione.
Esempi
git rm Documentation/\*.txt
Questo esempio utilizza un file globo jolly per rimuovere tutti i file *.txt
secondari della directory Documentation
e delle relative sottodirectory.
Nota che l'asterisco * è preceduto da barre in questo esempio; si tratta di una protezione che impedisce alla shell di espandere il carattere jolly. Il carattere jolly espande quindi i nomi dei file e delle sottodirectory nella directory Documentation/
.
git rm -f git-*.sh
Questo esempio utilizza l'opzione force e punta a tutti i file git-*.sh
con caratteri jolly. L'opzione force rimuove esplicitamente i file di destinazione sia dalla directory di lavoro che dall'indice di staging.
Come rimuovere i file non più presenti nel file system
Come indicato sopra in "Perché usare git rm
invece di rm
", git rm
è in realtà un comodo comando che combina la shell standard rm
e git add
per rimuovere un file dalla directory di lavoro e promuovere tale rimozione nell'indice di staging. Un repository può entrare in uno stato complicato nel caso in cui diversi file vengano rimossi utilizzando solo il comando rm
della shell standard.
Se l'intenzione è quella di registrare tutti i file rimossi esplicitamente come parte del prossimo commit, git commit -a
aggiungerà tutti gli eventi di rimozione all'indice di staging in preparazione del prossimo commit.
Se tuttavia, l'intenzione è quella di rimuovere in modo persistente i file che sono stati rimossi con la shell rm
, usa il seguente comando:
git diff --name-only --diff-filter=D -z | xargs -0 git rm --cached
Questo comando genererà un elenco dei file rimossi dalla directory di lavoro e inserirà tale elenco in git rm --cached
che aggiornerà l'indice di staging.
Riepilogo di git rm
git rm
è un comando che funziona su due degli alberi di gestione dello stato interni primari di Git: la directory di lavoro e l'indice di staging. git rm
viene usato per rimuovere un file da un repository Git. È un metodo pratico che combina l'effetto del comando rm
della shell predefinito con git add
. Ciò significa che prima rimuoverà una destinazione dal file system e poi aggiungerà quell'evento di rimozione all'indice di staging. Il comando è uno dei tanti che possono essere usati per annullare le modifiche in Git.
Condividi l'articolo
Argomento successivo
Letture consigliate
Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.