git checkout tous les fichiers

127

Comment puis-je me débarrasser de toutes les modifications dans tous les fichiers de mon référentiel?

Disons que je suis dans une succursale et que j'ai fait quelques changements. git statusrenvoie un ensemble de fichiers dans la section "Modifications non préparées pour la validation" et je remarque que je voudrais me débarrasser de toutes ces modifications dans tous les fichiers. Comment puis-je faire cela avec une seule commande?

Je sais que je peux faire ce qui suit pour extraire un seul fichier:

git checkout -- <file>

J'ai remarqué que git checkout --seul renvoie la liste de tous les fichiers non validés. Cependant, je ne peux pas trouver un moyen de les vérifier tous, quelque chose comme git checkout --all.

J'ai vérifié man git checkoutet je n'ai rien trouvé. J'ai aussi vu Git: Checkout tous les fichiers sauf un et essayé git checkout .et n'a pas fonctionné non plus.

Dois-je le faire par programme, en boucle sur la git checkout --sortie?

fedorqui 'Alors arrêtez de nuire'
la source

Réponses:

194

Si vous êtes à la racine de votre répertoire de travail, vous pouvez git checkout -- .extraire tous les fichiers du HEAD actuel et remplacer vos fichiers locaux.

Vous pouvez également git reset --hardréinitialiser votre répertoire de travail et remplacer toutes les modifications (y compris l'index).

poussée
la source
les deux options sont-elles équivalentes (si nous remettons à HEAD)?
lucidbrot le
10
Non, il y a certaines différences. Par exemple git checkout -- ., ne réinitialisera que les modifications apportées à l'état de l'index. Donc, si vous avez déjà ajouté des fichiers à l'index, c'est ce à quoi il sera réinitialisé. D'autre part git reset --hard, vous supprimerez également l'index, par exemple, si vous avez ajouté des fichiers non suivis à l'index (pour commencer à les suivre), ils seront également supprimés. git checkoutpermet également de ne restaurer que partiellement le répertoire de travail en passant un chemin plus spécifique qui peut être très utile.
poke le
4
@poke Salut Poke, je suis sûr que git checkout -. ne fonctionne pas. Je l'ai essayé pour plusieurs changements non mis en scène.
Aman
2
d' autres commandes pour atteindre le même résultat: git checkout --force,git reset --hard
Tjalling
3

Une autre manière que j'ai trouvée utile est:

git checkout <wildcard> 

Exemple:

git checkout *.html

Plus généralement:

git checkout <branch> <filename/wildcard>
Singhak
la source
1
Si le globbing est activé sur votre shell et qu'il y a des fichiers non suivis dans le répertoire de travail, cela échouera à moins que vous n'échappiez l'astérisque, par exemple git checkout \*ou git checkout '*'.
Josh Cooley