2012-09-30 18 views
57

Sto cercando di imparare Git. Sono confuso tragit rm - file cache vs git file di reset

git rm --cached file 

e

git reset file 

entrambi i comandi sembrano prendere il file da messa in scena a zona non-messa in scena. Come differiscono i comandi?

+2

possibile duplicato di [Qual è la differenza tra \ 'git rm --cached asd \" e \ 'git reset head - asd \'] (http://stackoverflow.com/questions/5798930/whats-the- differenza-tra-git-rm-cache-asd-e-git-reset-head-asd) – Undistraction

risposta

77

git rm --cached <file> rimuoverà completamente il contenuto del file dall'indice. Ciò significa che su commit il file verrà rimosso dal commit HEAD. (Se il file è stato aggiunto solo per l'indice e non ancora rintracciato questo è un "no-op".)

git reset -- <file> azzera il contenuto del file nell'indice di essere lo stesso del capo commesso. Ciò significa che in caso di commit nessuna modifica verrà confermata nel file. Questa operazione non è valida se non esiste alcuna versione tracciata del file nel commit HEAD.

+3

Forse in aggiunta: 'git rm --cached 'aggiungerà l'azione * delete * del file all'indice, solo come 'git add' aggiungerà un'azione * add *. – poke

+0

L'indice è == area di sosta? Se un file si trova nell'indice, non viene tracciato per estensione? – ataulm

+0

Per git reset - , ci dovrebbe essere una versione tracciata di quel file in commit HEAD. Se è un nuovo file aggiunto all'indice, non ci sarà alcuna tracciatura nel commit HEAD –