Comment supprimer des fichiers de la zone de transit Git?


552

J'ai apporté des modifications à certains de mes fichiers dans mon référentiel local, puis j'ai fait git add -Ace qui, je pense, a ajouté trop de fichiers à la zone de transfert. Comment supprimer tous les fichiers de la zone de transit?

Après cela, je le ferai manuellement git add "filename".


2
J'espère que vous recherchez ceci: stackoverflow.com/questions/1505948/…
— sumitb.mdi

27
git statusvous indique déjà exactement quoi faire si vous souhaitez décompresser des fichiers.
— Michael Foukarakis

6
@MichaelFoukarakis git status n'est pas aussi utile si vous souhaitez supprimer un répertoire entier s'il inonde le terminal de sortie (comme node_modules)
— whiterook6

2
À l'avenir, au lieu d'ajouter tout, vous voudrez peut-être vous familiariser avec git add -pou git add --patch(ce sont les mêmes). Cet indicateur vous permet de sélectionner de manière interactive les fichiers ou les modifications individuelles que vous souhaitez mettre en scène - vous pouvez ensuite obtenir beaucoup plus finement le travail que vous incluez dans la validation.
— Gabe

Réponses:


691

Vous pouvez décompresser des fichiers de l'index à l'aide de

git reset HEAD -- path/to/file

Tout comme git add, vous pouvez décompresser les fichiers de manière récursive par répertoire, etc.

git reset HEAD -- .

De plus, pour référence future, la sortie de git statusvous indiquera les commandes à exécuter pour déplacer des fichiers d'un état à un autre.


5
$ git reset HEAD -- .produit fatal: Failed to resolve 'HEAD' as a valid ref.Notez que je n'ai jamais fait de commit; c'est le premier git addaprèsgit init
— Patrizio Bertoni

5
Vous pouvez également utiliser git reset @.
— alex

@alex Est-ce mieux que tout simplement git reset?
— Antony Hatchkins

7
@AntonyHatchkins @est synonyme de HEAD.
— alex

Totalement travaillé pour moi, merci!
— wayneseymour

306

Utilisation

git reset

pour démasquer tous les fichiers intermédiaires.


3
Puis-je demander en quoi cela diffère git reset HEAD --ou s'agit-il simplement d'une manière plus succincte d'effectuer la même opération?
— ProNotion

1
@ProNotion Reset utilise HEADpar défaut. Quel est le but de ceux qui sont --en vous git reset HEAD --?
— Antony Hatchkins

@AntonyHatchkins, il aurait dû être suivi d'un point final (point) et a été repris de l'exemple de la réponse acceptée.
— ProNotion

11
@ProNotion Désolé de vous avoir mal compris. git reset HEAD -- .est différent en ce qu'il ne réinitialise que les fichiers dans le répertoire en cours et en dessous tout en git resetréinitialise tous les fichiers du projet.
— Antony Hatchkins

101

Si vous avez déjà validé un tas de fichiers indésirables, vous pouvez les supprimer et dire à git de les marquer comme supprimés (sans les supprimer réellement) avec

git rm --cached -r .

--cachedlui dit de supprimer les chemins de la mise en scène et de l'index sans supprimer les fichiers eux-mêmes et -ropère sur les répertoires de manière récursive. Vous pouvez ensuite git addtous les fichiers que vous souhaitez suivre.


Je suppose que c'est "git rm -."
— Alexander Mills,

1
il y a une erreur fatale de ne pas supprimer les fichiers avec "git rm -."
— Alexander Mills

@AlexMills Je mets à jour ma réponse pour mentionner les options réelles pour rmdésinstaller tous les fichiers.
— Max

2
J'ai essayé ceci sur un fichier singulier comme celui-ci: "git rm --cached my / file.java" et je vois ce fichier toujours dans la zone de transit, mais comme supprimé! @Max lorsque vous exécutez cette commande, vos fichiers sont-ils réellement supprimés ou simplement non mis en scène? Si vous ne recherchez pas ce comportement, j'irais avec une réponse.
— OrwellHindenberg

@OrwellHindenberg merci d'avoir signalé cela! --cachedest vraiment d'arrêter le suivi des fichiers que vous avez déjà validés. Le fichier n'est donc pas réellement supprimé, mais git le pense. J'ai clarifié cela dans ma réponse.
— Max

30

Vous pourriez utiliser

git reset HEAD

puis ajoutez les fichiers spécifiques que vous souhaitez avec

git add [directory/]filename

Vous pouvez ajouter le paramètre -x et les fichiers ignorés seront également supprimés. C'est utile si vous vous trompez avec votre .gitignore et que vous avez quelque chose d'utile (comme dans mon cas). ( git-scm.com/docs/git-clean )
— Keeprock

1
Avec les dossiers en excès, git statusvous dira que le répertoire de travail est propre - mensonges! git clean -dfa fait ce travail, merci.
— Leo

5
Notez que git clean -dfcela supprimera définitivement les fichiers. Sur les systèmes de type UNIX, il appellera unlink()et vos fichiers supprimés ne seront pas récupérables.
— Hanxue

11
L'OP demande de supprimer les fichiers. Vous lui conseillez de supprimer les fichiers. Je vous suggère de lire ce qu'est la zone de transit avant de répondre.
— Antony Hatchkins du

Merci d'avoir supprimé l'intégralité de mon projet non enregistré.
— Vansuita Jr.,

7

Comme indiqué dans d'autres réponses, vous devez utiliser git reset. Cela annulera l'action du git add -A.

Remarque: git reset est équivalent à git reset --mixedce que cela fait

Réinitialise l'index mais pas l'arborescence de travail (c'est-à-dire que les fichiers modifiés sont conservés mais pas marqués pour validation) et signale ce qui n'a pas été mis à jour. Il s'agit de l'action par défaut. [ git reset ]


2
.. et pour supprimer un seul fichier de la zone de git reset filenameToNotCommit
— transit

5

Maintenant à v2.24.0 suggère

git restore --staged .

pour supprimer les fichiers.


1

Vous pouvez réinitialiser la zone de transit de plusieurs manières:

  1. Réinitialisez HEAD et ajoutez tous les fichiers nécessaires à l'enregistrement comme ci-dessous:

     git reset HEAD ---> removes all files from the staging area
     git add <files, that are required to be committed>
     git commit -m "<commit message>"
     git push 
    

Qu'est-ce qui rend cette réponse différente des six réponses existantes?
— Antony Hatchkins

1

Pour supprimer tous les fichiers de la zone de transit, utilisez -
git reset
Pour supprimer l'utilisation de fichiers spécifiques -
git reset "File path"


1

utilisation

git reset HEAD

Cela supprimera tous les fichiers de la zone de transit


1

Si des fichiers indésirables ont été ajoutés à la zone de transfert mais pas encore validés, une simple réinitialisation fera le travail:

$ git reset HEAD file
# Or everything
$ git reset HEAD .

Pour supprimer uniquement les modifications non mises en scène dans le répertoire de travail actuel, utilisez:

git checkout -- .

0

Utilisez " git reset HEAD <file>..." pour déchaîner les fils

ex: pour démasquer tous les fichiers

git reset HEAD .

pour déchaîner un fichier

git reset HEAD nameFile.txt

-3

J'ai essayé toutes ces méthodes mais aucune n'a fonctionné pour moi. J'ai supprimé le fichier .git en utilisant la rm -rf .gitforme du dépôt local, puis de nouveau fait git initet git addet les commandes de routine. Ça a marché.


4
Lire les git docs est généralement plus gratifiant que de suivre les conseils de xkcd.com/1597 ;)
— Antony Hatchkins

1
Peut-être que vous aviez un problème d'intégrité dans votre cas spécifique et que c'était l'option laissée, mais ce n'est pas recommandé.
— Shad

Veuillez ne pas faire cela, vous détruirez l'intégralité de votre dépôt git.
— Lennart Rolland du

-5

La meilleure façon d'annuler votre fichier qui se trouve déjà dans la zone de transfert est git reset --hard qui ramène vos fichiers transférés . Attention maintenant, cela supprimera les modifications échelonnées et non échelonnées.


2
C'est faux et dangereux !!! OP souhaite "simplement ajouter manuellement" les fichiers à nouveau par la suite, mais les --hardsupprime pour toujours.
— Antony Hatchkins
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.