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.

neoneye
la source
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.

Aristote Pagaltzis
la source
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.

tricot
la source
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.

mrduncle1
la source
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

Tofan Jena
la source