5386 votes

Comment supprimer les changements non indexés dans Git ?

Comment puis-je éliminer de ma copie de travail les modifications qui ne figurent pas dans l'index ?

0 votes

14 votes

git-clean supprime uniquement les fichiers non suivis de l'arbre de travail git-scm.com/docs/git-clean

28 votes

Pour clarifier le commentaire d'Asenar ci-dessus, git-clean -df peut être dangereux. Il supprimera les fichiers locaux non suivis (par exemple, ceux qui sont couverts par un .gitignore). Lisez attentivement tout ce qui suit et envisagez plutôt le git checkout .

6045voto

Tobi Points 13586

Pour tous les fichiers non gérés dans le répertoire de travail actuel, utilisez :

git checkout -- .

Pour un fichier spécifique, utilisez :

git checkout -- path/to/file/to/revert

-- ici pour lever toute ambiguïté (ceci est connu sous le nom de désambiguïsation des arguments ).

À partir de la version 2.23 de Git, il est préférable d'utiliser l'option plus spécifique suivante

git restore .

resp.

git restore path/to/file/to/revert

qu'avec git switch remplace la surcharge git checkout ( voir ici ), et supprime ainsi la désambiguïsation de l'argument.

127 votes

Cela semble être la méthode canonique de git, c'est-à-dire exactement ce que git vous dit de faire si vous tapez git status

33 votes

Ne fonctionne pas s'il y a des fichiers non suivis. Git dit error: The following untracked working tree files would be overwritten by checkout: ... .

105 votes

Question de débutant, que signifie sémantiquement "git checkout -- ." ?

3016voto

Greg Hewgill Points 356191

Un autre moyen plus rapide est :

git stash save --keep-index --include-untracked

Vous n'avez pas besoin d'inclure --include-untracked si vous ne voulez pas être minutieux à ce sujet.

Après cela, vous pouvez laisser tomber cette cachette avec un git stash drop si vous le souhaitez.

126 votes

Et pour être minutieux, vous voudriez --include-untracked également.

0 votes

Je pense qu'il est préférable d'utiliser git reset --hard si vous ne voulez pas garder la trace des changements.

12 votes

@KarimSamir : La question porte spécifiquement sur les changements qui sont pas dans l'index . Le site git reset éliminera également les changements dans l'index.

2066voto

Mariusz Nowak Points 5879

Il semble que la solution complète soit :

git clean -df
git checkout -- .

git clean supprime tous les fichiers non suivis ( avertissement : mais il ne supprimera pas les fichiers ignorés mentionnés directement dans .gitignore, il peut supprimer des fichiers ignorés résidant dans des dossiers ) et git checkout efface toutes les modifications non organisées.

133 votes

Les deux autres réponses ne marchent pas vraiment, celle-là oui.

2 votes

Pour une raison quelconque, le commit précédent a été rétabli

19 votes

@dval c'est parce que la première commande a supprimé les fichiers non indexés et la seconde a supprimé les changements non indexés (des fichiers indexés). Donc, si vous n'aviez pas de modifications indexées, cela revient à revenir au dernier commit avec la commande git reset --hard

354voto

Charles Bailey Points 244082

Ceci vérifie l'index courant pour le répertoire courant, en jetant tous les changements dans les fichiers du répertoire courant vers le bas.

git checkout .

ou ceci qui extrait tous les fichiers de l'index, en écrasant les fichiers de l'arbre de travail.

git checkout-index -a -f

17 votes

+1 C'est la BONNE RÉPONSE, car elle gère correctement le cas où certains fichiers ont été mis à jour à la fois par des étapes et des étapes. y changements non échelonnés. Notez que cette solution REPARTITIONNE les modifications non indexées ; si vous souhaitez les conserver, vous devez utiliser la réponse de @greg-hewgill qui consiste à git stash save --keep-index .

0 votes

git checkout -- ne fonctionne pas si vous n'avez qu'une seule branche. git checkout . fonctionne toujours.

0 votes

Merci beaucoup ! Enfin une réponse qui fonctionne TOUJOURS ! Ceci peut être combiné avec git clean pour supprimer également les fichiers non suivis.

269voto

Elvis Ciotti Points 1384
git clean -df

Nettoie l'arbre de travail en supprimant récursivement les fichiers qui ne sont pas sous contrôle de version, en commençant par le répertoire courant.

-d : Suppression des répertoires non tracés en plus des fichiers non tracés

-f : Force (peut ne pas être nécessaire en fonction de clean.requireForce réglage)

Exécuter git help clean pour voir le manuel

0 votes

Pourquoi cette réponse n'a pas tous les votes ? répondu en 2011 et toujours correct.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X