Comment supprimer un seul fichier de la zone de transfert de Git mais ne pas le supprimer de l'index ou annuler les modifications apportées au fichier lui-même?

Situation: j'ai un dépôt Git avec des fichiers déjà dans l'index. J'apporte des modifications à plusieurs fichiers, ouvre Git et ajoute ces fichiers à ma zone de transit avec " git add ."

Question: Comment puis-je supprimer un de ces fichiers de la zone de transfert mais ne pas le supprimer de l'index ou annuler les modifications apportées au fichier lui-même?

995
demandé sur PHLAK 2009-10-01 23:24:04

14 réponses

Si je comprends bien la question, vous voulez simplement "annuler" le git add qui a été fait pour ce fichier.

Si vous devez supprimer un fichier unique de la zone intermédiaire, utilisez

git reset HEAD -- <file>

Si vous devez supprimer un répertoire entier (dossier) de la zone intermédiaire, utilisez

git reset HEAD -- <directoryName>

Vos modifications seront conservées. Lorsque vous exécutez git status, le fichier apparaîtra à nouveau comme modifié mais pas encore mis en scène.

Voir le git reset homme page pour plus de détails.

1551
répondu Tim Henigan 2018-02-14 02:30:16
git rm --cached FILE

,

git rm -r --cached CVS */CVS
138
répondu user335425 2010-05-07 12:25:09

git reset <file>

Fonctionne que vous ayez ou non des commits précédents.

79
répondu MTS 2013-08-13 04:20:46

Donc, un léger tweak à la réponse de Tim Henigan: vous devez utiliser -- avant le nom du fichier. Cela ressemblerait à ceci:

git reset HEAD -- <file>
48
répondu GuerillaNerd 2015-07-31 20:25:57
git reset filename.txt

Si vous avez une modification dans filename.txt, vous l'avez ajouté à stage par erreur et vous voulez supprimer le fichier de staging mais vous ne voulez pas perdre les modifications.

8
répondu Vlad Cioaba 2018-03-20 14:29:38

Si vous souhaitez simplement supprimer un sous-ensemble des modifications apportées à votre fichier, vous pouvez utiliser:

git reset -p

Ou

git reset -p <file_name>

Cette commande est fondamentalement l'inverse de git add -p: elle ne supprimera que les modifications sélectionnées de la zone de transit. Je le trouve extrêmement utile dans "unadding" quelque chose que j'ai ajouté par erreur.

6
répondu fede1024 2017-02-17 22:13:23

Si vous souhaitez supprimer des fichiers suivant un certain modèle et que vous utilisez git rm --cached, Vous pouvez également utiliser des modèles file-glob.

Voir ici.

4
répondu thilinarmtb 2014-01-04 09:21:44

Vous voulez:

  • Affecter à un seul fichier

  • Supprimer le fichier de la zone intermédiaire

  • Ne pas supprimer un seul fichier de l'index

  • Ne pas annuler la modification elle-même

Et la solution est

git reset HEAD file_name.ext

Ou

git reset HEAD path/to/file/file_name.ext
2
répondu Do Nhu Vy 2017-10-31 09:33:53

Lorsque vous faites git status, Git vous indique comment défaire:

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

Donc git reset HEAD <file> a fonctionné pour moi et les changements n'ont pas été touchés.

1
répondu 2018-05-08 01:19:09

Si vous apportez des modifications à de nombreux fichiers suivis mais que vous voulez seulement en mettre en scène quelques-uns, faites un

git add .

N'est pas toujours favorable (ou recommandé) - car il met en scène tous les fichiers suivis (certains cas où vous voulez conserver les modifications uniquement pour vous-même et ne voulez pas les mettre en scène dans le référentiel distant).

Il n'est pas non plus idéal de faire un tas de

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

Si vous avez beaucoup de répertoires imbriqués (ce qui est le cas dans la plupart des projets) - obtient ennuyeux

C'est quand git GUI est utile (probablement seulement le temps que je l'utilise). Il suffit d'ouvrir Git GUI, il montre les sections de fichiers mises en scène et non stockées. Sélectionnez les fichiers de la section Mise en scène que vous souhaitez défaire et appuyez sur

Ctrl+U (pour windows)

Pour les détacher.

0
répondu Chinmay Prabhudesai 2018-08-10 22:29:32

Vous devez être dans le répertoire du fichier, puis tapez la commande suivante dans le terminal

git reset HEAD .

L'hypothèse est que vous devez réinitialiser un seul fichier.

-1
répondu nevosial 2017-09-26 19:51:31

Pour tout annuler à la fois, exécutez cette commande

git reset HEAD -- .
-5
répondu Devendra Verma 2016-09-06 19:03:38

git checkout -- <file>

Cela fonctionne parfaitement pour supprimer des fichiers de la zone de transit

-10
répondu Juan Ramirez 2015-05-18 18:13:54

Dans mon cas, je fais

git checkout -- FILE
-11
répondu Maxi Capodacqua 2014-05-15 16:39:54