web-dev-qa-db-fra.com

Comment puis-je supprimer un seul fichier de la zone de stockage intermédiaire (annuler git add)?

Situation: J'ai un référentiel Git avec des fichiers déjà dans l'index. Je modifie plusieurs fichiers, ouvre Git et ajoute ces fichiers dans ma zone de stockage intermédiaire avec "git add".

Question: Comment puis-je supprimer l'un de ces fichiers de la zone de stockage intermédiaire sans le supprimer de l'index ou annuler les modifications apportées au fichier lui-même?

1146
PHLAK

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 seul fichier de la zone de stockage intermédiaire, utilisez

git reset HEAD -- <file>

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

git reset HEAD -- <directoryName>

Vos modifications seront conservées. Lorsque vous exécutez git status, le fichier s'affichera de nouveau sous la forme modifiée mais non encore stockée.

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

1777
Tim Henigan
git rm --cached FILE

,

git rm -r --cached CVS */CVS
146
user335425

git reset <file>

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

85
MTS

Donc, une légère modification à la réponse de Tim Henigan: vous devez utiliser - avant le nom du fichier. Cela ressemblerait à ceci:

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

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

15
Vlad Cioaba

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 supprimera uniquement les modifications sélectionnées de la zone intermédiaire. Je trouve cela extrêmement utile pour "dénouer" quelque chose que j'ai ajouté par erreur.

6
fede1024

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

Voir ici .

4
thilinarmtb

Quand vous faites git status, Git vous dit comment décompresser:

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

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

2
user4299998

Tu veux:

  • Affecter à un seul fichier

  • Supprimer le fichier de la zone intermédiaire

  • Ne pas supprimer un seul fichier de l'index

  • Ne pas annuler le changement lui-même

et la solution est

git reset HEAD file_name.ext

ou

git reset HEAD path/to/file/file_name.ext
2
D Vy

Si vous apportez des modifications à de nombreux fichiers suivis mais que vous ne souhaitez en organiser que quelques-uns, procédez comme suit.

git add .

n'est pas toujours favorable (ni recommandé) - car il organise tous les fichiers suivis (dans certains cas, vous ne souhaitez conserver les modifications que pour vous et ne souhaitez pas les transférer dans le référentiel distant).

il n'est pas idéal non plus 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) - devient agaçant

C’est à ce moment-là que l’interface graphique de Git est utile (probablement la seule fois que je l’utilise). Ouvrez simplement l'interface graphique de Git, elle affiche les sections de fichier mises en scène et non mises en scène. Sélectionnez les fichiers de la section intermédiaire que vous souhaitez décomposer et appuyez sur

Ctrl+U (pour Windows)

pour les décaler.

1
rite2hhh

Je pense que vous avez probablement été confondu avec le concept d'index , comme @ CB Bailey a commenté:

La zone intermédiaire est l'index.

Vous pouvez simplement considérer le répertoire intermédiaire et l'index comme la même chose.
Donc, comme réponse de Tim Henigan , je suppose:

vous voulez simplement "annuler" le git add qui a été fait pour ce fichier.



Voici ma réponse:

Généralement, il existe deux manières d'annuler une opération stage , les autres réponses déjà mentionnées:

git reset HEAD <file>

et

git rm --cached <file>

Mais quelle est la différence?

Supposons que le fichier a été mis en scène et existe dans le répertoire de travail également, utilisez git rm --cached <file> si vous souhaitez le supprimer du répertoire de stockage intermédiaire et le conserver dans le répertoire de travail . Mais notez que cette opération supprimera non seulement le fichier du répertoire de stockage intermédiaire , mais marquera également le fichier comme deleted in répertoire de transfert , si vous utilisez

git status

après cette opération, vous verrez ceci:

        deleted:    <file>

C'est un enregistrement de la suppression du fichier du répertoire de stockage intermédiaire . Si vous ne souhaitez pas conserver cet enregistrement et simplement annuler une opération précédente d'un fichier, utilisez plutôt git reset HEAD <file>.


-------- FIN DE RÉPONSE --------

PS: J'ai remarqué certaines réponses mentionnées:

git checkout -- <file>

Cette commande concerne la situation dans laquelle le fichier a été mis en scène , mais que le fichier a été modifié dans le répertoire de travail Une fois l'opération terminée, utilisez cette opération pour restaurer le fichier dans le répertoire à partir de . ) répertoire intermédiaire . En d’autres termes, après cette opération, des modifications ont lieu dans votre répertoire de travail , PAS dans votre répertoire de transfert .

0
Wulfric Lee