Domanda

Situazione: Ho un repository Git con file già nell'indice.Apporto modifiche a diversi file, apro Git e aggiungo questi file alla mia area di staging con "git add".

Domanda: Come posso rimuovere uno di questi file dall'area di staging ma non rimuoverlo dall'indice o annullare le modifiche al file stesso?

È stato utile?

Soluzione

Se ho capito bene la domanda, si vuole semplicemente "annullare" la git add che è stato fatto per quel file.

Se è necessario rimuovere un unico file dalla zona di sosta, usare

git reset HEAD -- <file>

Se è necessario rimuovere un directory intero (cartella) dalla zona di sosta, usare

git reset HEAD -- <directoryName>

saranno mantenute le modifiche. Quando si esegue il file git status sarà ancora una volta mostrerà come modificato ma non ancora messo in scena.

Vedere la git reset uomo pagina per i dettagli.

Altri suggerimenti

git rm --cached FILE

,

git rm -r --cached CVS */CVS

git reset <file>

Funziona anche se non si dispone di alcun commit precedenti.

Quindi, un leggero tweak per la risposta di Tim Henigan: è necessario utilizzare - prima del nome del file. Si sarebbe simile a questa:

git reset HEAD -- <file>
git reset filename.txt

Se si dispone di una modifica in filename.txt, è aggiunto mettere in scena per errore e si desidera rimuovere il file dalla messa in scena, ma non si vuole perdere le modifiche.

Nel caso in cui si desidera solo per rimuovere un sottoinsieme delle modifiche al file, è possibile utilizzare:

git reset -p

o

git reset -p <file_name>

Questo comando è fondamentalmente l'inverso di git add -p: sarà solo rimuovere le modifiche selezionate dall'area di gestione temporanea. Trovo estremamente utile in qualcosa di "unadding" che ho aggiunto per errore.

Se si desidera rimuovere i file dopo un certo modello e si utilizza git rm --cached, è possibile utilizzare i modelli di file-glob troppo.

qui .

Tu vuoi:

  • Influenza su un singolo file

  • Rimuovi il file dall'area di gestione temporanea

  • Non rimuovere un singolo file dall'indice

  • Non annullare la modifica stessa

e la soluzione è

git reset HEAD file_name.ext

O

git reset HEAD path/to/file/file_name.ext

Quando si esegue git status, Git spiega come unstage:

Changes to be committed: (use "git reset HEAD <file>..." to unstage).

Quindi git reset HEAD <file> funzionato per me e le modifiche sono state un-toccato.

Se si apportano modifiche a molti file cingolati ma solo vuole mettere in scena alcuni di loro, facendo un

git add .

non è sempre favorevole (o consigliato) -. In quanto mette in scena tutti i file monitorati (alcuni casi in cui si desidera mantenere le modifiche solo a te stesso e non si desidera loro in scena al repository remoto)

né è l'ideale di fare un po 'di

git add path/to/file1 path/to/file2

se hai un sacco di directory nidificate (che è il caso nella maggior parte dei progetti) - diventa fastidioso

Questo è quando Git GUI è utile (probabilmente unica volta che lo uso). Basta aprire Git GUI, si vede messo in scena e le sezioni di file unstaged. Selezionare i file dalla sezione di messa in scena che si desidera unstage e premere

  

Ctrl+U (per Windows)

per unstage loro.

Credo che probabilmente sono confuso con il concetto di index , come @CB Bailey ha commentato:

  

L'area di sosta è l'indice.

Si può semplicemente prendere in considerazione directory di gestione temporanea e index , come la stessa cosa.
Così, proprio come quella di @ Tim Henigan risposta , immagino:

  

si vuole semplicemente per "annullare" la git add che è stato fatto per quel file.


Ecco la mia risposta:

Comunemente, ci sono due modi per annullare un stadio il funzionamento, come altre risposte già detto:

git reset HEAD <file>

e

git rm --cached <file>

Ma qual è la differenza?

Si supponga che il file è stato messa in scena ed esiste in directory di lavoro anche, l'uso git rm --cached <file> se si desidera rimuoverla dal directory di gestione temporanea , e mantenere il file in directory di lavoro . Ma si noti che questa operazione non solo rimuovere il file dal directory di gestione temporanea , ma anche contrassegnare il file come deleted in directory di gestione temporanea , se si utilizza

git status

dopo questa operazione, si vedrà questo:

        deleted:    <file>

E 'un disco di rimuovere il file dal directory di gestione temporanea . Se non si desidera mantenere tale record e semplicemente desidera annullare una precedente operazione tappa di un file, utilizzare git reset HEAD <file> invece.


-------- -------- FINE RISPOSTA

PS: ho notato alcune risposte menzionati:

git checkout -- <file>

Questo comando è per la situazione in cui il file è stato messa in scena , ma il file è stato modificato in directory di lavoro dopo che è stato messo in scena, utilizzare questa operazione per ripristinare la depositare in directory di lavoro directory di gestione temporanea . In altre parole, dopo questa operazione, i cambiamenti avvengono nel vostro directory di lavoro , non directory di gestione temporanea .

Hai bisogno di essere nella directory del file e quindi digitare quanto segue nel terminale

git reset HEAD .

presupposto è che è necessario ripristinare un solo file.

Per unstage tutto in una volta, eseguire questo comando

git reset HEAD -- .

git checkout -- <file>

Funziona perfettamente per rimuovere i file dal Staging Area

Nel mio caso, io faccio

git checkout -- FILE
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top