Annuler «git add <dir>»?


186

J'ai ajouté des fichiers par erreur en utilisant la commande "git add dir". Je n'ai pas encore lancé "git commit". Existe-t-il un moyen de supprimer ce répertoire et tout ce qu'il contient du commit?

J'ai essayé git reset dir, mais cela n'a pas fonctionné. Apparemment, git reset filec'est le moyen de le défaire. Mais j'ai tellement de fichiers et si peu de temps.


6
git reset <path>met à jour l'index de ce chemin afin qu'il corresponde HEAD(le commit actuel). Cela ne touche pas l'arbre de travail.
Cascabel le

Réponses:


279

Pour supprimer un répertoire et tout ce qu'il contient de l'index,

git rm --cached -r dir

Le --cachedcommutateur fait git rmfonctionner uniquement sur l'index et ne touche pas la copie de travail. Le -rcommutateur le rend récursif.


12
«Supprimer tout le répertoire intermédiaire de l'index» serait une explication légèrement meilleure de la commande git, car pour les débutants git comme moi, la commande ressemble beaucoup à si elle pouvait même supprimer le répertoire sur le système de fichiers. Juste une question de goût.
Sascha Gottfried

1
C'est pourquoi j'avais mis en gras le --cachedcommutateur. Néanmoins, j'ai modifié la réponse pour préciser qu'elle s'applique uniquement à l'index.
Aristotle Pagaltzis

@SaschaGottfried merci pour la clarification, j'ai eu peur au début même avec le montage mais votre commentaire l'a clarifié :)
Max von Hippel

J'ai presque supprimé tout mon dossier: S après cela ... git reset HEAD foldertout a été corrigé ... mais avant de faire cela, faites un git status folder, et assurez-vous qu'il est dit qu'il a `` supprimé '' tous les fichiers de ce dossier
Bengalaa

21

Vous voudrez utiliser git rm --cached -r <dir>. cette commande supprimera le contenu du répertoire intermédiaire de l'index.

si le répertoire a déjà été suivi, vous devez rechercher manuellement les nouveaux et anciens fichiers et les désinstaller…

Exécutez probablement git reset <dir>après cela pour réinitialiser les fichiers existants (et déjà suivis) dans le répertoire.


Mise à jour 2019:

Exécutez simplement git reset directory, il désinstallera tous les fichiers récemment ajoutés.


n'est pas git reset <dir>assez seul?
Bananach

@Bananach Je viens d'essayer et il semble que, oui, git reset <dir>cela fonctionnerait aussi. La réponse date de 2011, donc je ne sais pas si cela fonctionnait déjà il y a 8 ans. Je mettrai à jour la réponse. Merci pour l'indice!
knittl


11

Répertoire d'annulation

$ git reset <dir>

Désactive tous les fichiers et dossiers avec lesquels j'ai mis en scène:

$ git add <dir>

Confirmer l'annuaire non organisé

Afin de confirmer la suppression du répertoire et de son contenu de la mise en scène (c'est-à-dire "Modifications à valider"), exécutez ce qui suit:

$ git status

ou

$ git diff --staged --name-only 

pour confirmer qu'aucun des dossiers ou fichiers précédemment mis en scène ne l'est toujours.


2

Une commande simple pour supprimer un fichier / dossier intermédiaire qui n'est pas encore validé est - git restore --staged <dir>.

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.