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?
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.
git rm --cached FILE
,
git rm -r --cached CVS */CVS
git reset <file>
Fonctionne que vous ayez ou non des commits précédents.
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>
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.
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.
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 .
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.
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
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.
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 .