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.