Annullare "git add <dir>"?


186

Ho erroneamente aggiunto file usando il comando "git add dir". Non ho ancora eseguito "git commit". C'è un modo per rimuovere questa directory e tutto ciò che è contenuto dal commit?

Ho provato git reset dir, ma non ha funzionato. Apparentemente git reset fileè il modo di annullarlo. Ma ho così tanti file e così poco tempo.


6
git reset <path>aggiorna l'indice per quel percorso in modo che corrisponda HEAD(il commit corrente). Non tocca l'albero di lavoro.
Cascabel,

Risposte:


279

Per rimuovere una directory e tutto al suo interno dall'indice,

git rm --cached -r dir

L' --cachedinterruttore fa git rmfunzionare solo sull'indice e non tocca la copia di lavoro. L' -rinterruttore lo rende ricorsivo.


12
"Rimuovere l'intera directory gestita dall'indice" sarebbe una spiegazione leggermente migliore del comando git, dal momento che per i principianti git come me il comando assomiglia molto se potesse anche eliminare la directory sul file system. Solo per questione di gusti.
Sascha Gottfried,

1
Ecco perché avevo messo in grassetto l' --cachedinterruttore. Tuttavia, ho modificato la risposta per qualificare che si applica solo all'indice.
Aristotele Pagaltzis,

@SaschaGottfried grazie per il chiarimento, all'inizio ero spaventato anche con la modifica, ma il tuo commento lo ha chiarito :)
Max von Hippel

ho quasi cancellato tutta la mia cartella: S dopo questo ... facendo git reset HEAD foldertutto risolto ... ma prima di farlo, fai un git status folder, e assicurati che dica che ha "cancellato" tutti i file in quella cartella
Bengalaa

21

Ti consigliamo di usare git rm --cached -r <dir>. questo comando rimuoverà il contenuto della directory gestita dall'indice.

se la directory è già stata tracciata, devi trovare manualmente i file vecchi e nuovi e metterli in scena ...

Probabilmente eseguirlo git reset <dir>dopo per ripristinare i file esistenti (e già tracciati) all'interno della directory.


Aggiornamento 2019:

Semplicemente esegui git reset directory, rimuoverà tutti i file appena aggiunti.


non è git reset <dir>abbastanza solo?
Bananach,

@Bananach Ho appena provato e sembra che, sì, git reset <dir>funzionerebbe anche. La risposta è del 2011, quindi non sono sicuro che funzionasse già 8 anni fa. Aggiornerò la risposta. Grazie per il suggerimento!
Knittl


11

Directory di unstage

$ git reset <dir>

Annulla la messa in scena di tutti i file e le cartelle con cui ho messo in scena:

$ git add <dir>

Conferma directory non messa in scena

Per confermare la rimozione della directory e del suo contenuto dalla gestione temporanea (ovvero "Modifiche da eseguire"), eseguire quanto segue:

$ git status

o

$ git diff --staged --name-only 

per confermare che nessuna delle cartelle o file precedentemente messi in scena sono ancora in scena.


2

Un semplice comando per rimuovere un file / cartella a fasi, che non sono stati ancora impegnati, è - git restore --staged <dir>.

inserisci qui la descrizione dell'immagine

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.