Perché usare 'git rm' per rimuovere un file invece di 'rm'?


171

Su SVN, la rimozione diretta di qualcosa dal filesystem (anziché l'utilizzo di svn) ha creato un carico di mal di testa.

Non ho riscontrato che questo sia un problema durante l'utilizzo git, ma noto che git ha la sua rmimplementazione ( git rm).

Qual è la differenza tra rme git rm?

Risposte:


253

Se lo usi rm, dovrai seguirlo git add <fileRemoved>. git rmfa questo in un solo passaggio.

Puoi anche usare git rm --cachedciò che rimuoverà il file dall'indice (gestendolo per la cancellazione al prossimo commit), ma manterrai la tua copia nel file system locale.


Buona risposta. Sono stato in grado di utilizzare git reset --harde quindi fare un checkout del master per uscire dallo stato principale distaccato perché sapevo di non avere alcuna modifica senza commit. Se non hai eseguito il commit delle modifiche, potresti voler eseguire un git stash, ma sono relativamente nuovo con git, quindi non conosco il comando esatto. Se sei venuto qui o dopo il 2014, spero che questa risposta ti sia stata utile.
Eric Hepperle - CodeSlayer2010,

@Andy - Se ho usato rm(invece di git rm) e cancellato molti file utilizzandolo, e ora non voglio gitseguirli. C'è un modo per ripristinare le modifiche? Voglio gitcalcare il mio rmcome rimosso poiché non ho usato git rmin primo luogo.
Chetan Arvind Patil,

Sarebbe bello se questo fosse chiaramente indicato nei documenti online (potrebbe essere lì, ma ovviamente non è ovvio o questa domanda non sarebbe stata posta). Sarebbe bello per gli utenti sapere che non stanno facendo nulla di male se seguono la rotta del sistema operativo. E ci sono ragioni per seguire il percorso del sistema operativo. Ad esempio, se è necessario eliminare un file per verificare che qualcosa funzioni prima di eseguire la modifica, il percorso del sistema operativo è un po 'più sicuro rispetto all'utilizzo di git rm, poiché nel caso git è necessario annullare la messa in scena dell'azione, mentre nell'opzione OS è sufficiente recuperare (credo).
bob

12

Rimuovere i file usando rmnon è un problema di per sé, ma se vuoi impegnarti a rimuovere il file, dovrai git rmcomunque farlo , quindi potresti farlo in questo modo.

Inoltre, a seconda della shell, git rmdopo aver eliminato il file, non otterrai il completamento delle schede, quindi dovrai precisare il percorso da solo, mentre se git rmil file esiste ancora, il completamento delle schede funzionerà normalmente.


7

git rmrimuoverà il file dall'indice e dalla directory di lavoro (solo indice se utilizzato --cached) in modo che l'eliminazione venga gestita per il prossimo commit.


4

Tuttavia, se finisci per usare rm invece di git rm. Puoi saltare l'aggiunta git e confermare direttamente le modifiche usando:

git commit -a


3

Rimuovere i file dall'indice o dall'albero di lavoro e dall'indice. git rm non rimuoverà un file solo dalla tua directory di lavoro.

Ecco come è possibile eliminare un file utilizzando rm -fe quindi rimuoverlo dall'indice congit rm

$ rm -f index.html
$ git status -s
 D index.html
$ git rm index.html
rm 'index.html'
$ git status -s
D  index.html

Tuttavia puoi farlo tutto in una volta con solo git rm

$ git status -s
$ git rm index.html
rm 'index.html'
$ ls
lib vendor
$ git status -s
D  index.html

2

Quando usi git rm, la rimozione farà parte del tuo prossimo commit. Quindi, se vuoi spingere la modifica, dovresti usare git rm


2

Aggiungendo alla risposta di Andy, c'è un'utilità aggiuntiva per git rm:

  1. Sicurezza : quando si esegue git rminvece di rm, Git bloccherà la rimozione in caso di discrepanza tra la HEADversione di un file e l'indice di gestione temporanea o la versione dell'albero di lavoro. Questo blocco è un meccanismo di sicurezza per impedire la rimozione delle modifiche in corso.

  2. Salvaguardia : git rm --dry-run. Questa opzione è una protezione che eseguirà il git rmcomando ma non eliminerà effettivamente i file. Invece produrrà quali file avrebbe rimosso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.