1255 votes

git undo toutes les modifications non commises ou non sauvegardées

J'essaie d'annuler tous les changements depuis ma dernière livraison. J'ai essayé git reset --hard y git reset --hard HEAD après le visionnage ce poste . Je réponds avec la tête est maintenant à 18c3773 ... mais quand je regarde ma source locale tous les fichiers sont encore là. Qu'est-ce qui me manque ?

6 votes

Il s'agit d'une excellente ressource provenant directement de Github : Comment annuler (presque) tout avec Git

4 votes

Facile à comprendre et simple à lire : git-scm.com/book/fr/v2/Git-Basics-Undoing-Things (en anglais)

2405voto

mvp Points 29360
  • Cela va déstocker tous les fichiers que vous avez pu mettre en scène avec git add :

    git reset
  • Ceci rétablira toutes les modifications locales non validées (doit être exécuté dans le repo Root) :

    git checkout .

    Vous pouvez également annuler les modifications non validées uniquement pour un fichier ou un répertoire particulier :

    git checkout [some_dir|file.txt]

    Encore une autre façon de revenir sur tous les changements non validés (plus long à taper, mais fonctionne depuis n'importe quel sous-répertoire) :

    git reset --hard HEAD
  • Cela va supprimer tous les fichiers locaux non suivis, donc uniquement Les fichiers suivis par git restent :

    git clean -fdx

    AVERTISSEMENT : -x supprimera également tous les fichiers ignorés, y compris ceux spécifiés par .gitignore ! Vous pouvez utiliser -n pour avoir un aperçu des fichiers à supprimer.


Pour résumer, l'exécution des commandes ci-dessous est fondamentalement équivalente à une nouvelle git clone à partir de la source originale (mais il ne retélécharge rien, ce qui est beaucoup plus rapide) :

git reset
git checkout .
git clean -fdx

Une utilisation typique serait dans les scripts de construction, lorsque vous devez vous assurer que votre arbre est absolument propre - n'a pas de modifications ou de fichiers d'objets créés localement ou d'artefacts de construction, et vous voulez que cela fonctionne très rapidement et ne pas re-cloner le dépôt entier à chaque fois.

0 votes

@turibe c'est vrai. J'ai dû démarrer mon projet plusieurs fois parce qu'il supprimait toutes les dépendances téléchargées et mon dossier .idea. J'ai besoin d'une meilleure solution.

2 votes

@EresDev, tu n'as pas besoin d'exécuter git clean il annulera les modifications non validées mais conservera tous les fichiers non suivis ou ajoutés. Mais, cela peut affecter le résultat de la construction parce que certains des fichiers non suivis peuvent interférer. Par exemple, que se passe-t-il si votre répertoire .idea est corrompu ?

0 votes

git reset me dit que j'ai des changements que je dois sauvegarder

223voto

Abram Points 3501

Si vous souhaitez " annuler " tous les changements non validés sont simplement exécutés :

git stash
git stash drop

Si vous avez des fichiers non suivis (vérifiez en exécutant git status ), ceux-ci peuvent être supprimés en exécutant :

git clean -fdx

git stash crée une nouvelle réserve qui deviendra stash@{0} . Si vous souhaitez vérifier d'abord, vous pouvez exécuter git stash list pour voir la liste de vos réserves. Cela ressemblera à quelque chose comme :

stash@{0}: WIP on rails-4: 66c8407 remove forem residuals
stash@{1}: WIP on master: 2b8f269 Map qualifications
stash@{2}: WIP on master: 27a7e54 Use non-dynamic finders
stash@{3}: WIP on blogit: c9bd270 some changes

Chaque cachette est nommée d'après le messsage commit précédent.

8 votes

C'est une bonne solution, mais vous devez effectuer les changements en utilisant la fonction git add . antes de git stash parce qu'il me montrait des changements non validés même après que git stash

1 votes

Vous pouvez également faire git stash --include-untracked pour récupérer tous les fichiers, alors il n'y a pas besoin de faire le nettoyage qui se débarrasse des fichiers ignorés.

78voto

Ralph Points 21

Ce que je fais, c'est

git add . (adding everything)
git stash 
git stash drop

Une doublure : git add . && git stash && git stash drop

Une version plus courte, telle que signalée par M. Justin

git stash -u && git stash drop

40voto

bsheps Points 1024

Ajout de cette réponse parce que les réponses précédentes supprimer définitivement vos changements

La méthode sûre

git stash -u

Explication : Stocker les changements locaux y compris les changements non suivis ( -u ). La commande sauvegarde vos modifications locales et rétablit le répertoire de travail en fonction du commit HEAD.

Vous voulez récupérer les modifications plus tard ?

git stash pop

Explication : La commande réappliquera les changements au sommet de l'état actuel de l'arbre de travail.

Vous voulez supprimer définitivement les modifications ?

git stash drop

Explication : La commande supprime définitivement l'entrée cachée.

Lien vers la documentation git stash

25voto

keshav Points 488

Il y a aussi git stash - qui "stocke" vos modifications locales et peut être réappliquée ultérieurement ou abandonnée si elle n'est plus nécessaire.

más info sur la mise en réserve

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