Close

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.

Logo Git
materiale correlato

Scheda di riferimento rapido di Git

Logo di Bitbucket
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.

Le persone collaborano utilizzando una parete piena di strumenti

Blog di Bitbucket

Illustrazione su Devops

Percorso di apprendimento DevOps

Funzione Demo Den per demo con esperti Atlassian

Come Bitbucket Cloud funziona con Atlassian Open DevOps

Iscriviti alla nostra newsletter DevOps

Thank you for signing up