Comment rétablir l'état antérieur de toutes les modifications locales dans un projet géré par Git ?

J'ai un projet dans lequel j'ai lancé git init. Après plusieurs commits, j'ai fait git status qui m'a dit que tout était à jour et qu'il n'y avait aucun changement local.

Puis j'ai fait plusieurs changements consécutifs et j'ai réalisé que je voulais tout jeter et revenir à mon état d'origine. Cette commande le fera-t-elle pour moi ?

git reset --hard HEAD
Solution

Si vous souhaitez annuler les modifications apportées à votre copie de travail, procédez comme suit :

git checkout .

Si vous souhaitez annuler les modifications apportées à l'index (c'est-à-dire celles que vous avez ajoutées), procédez comme suit. Attention, ceci réinitialisera tous vos commits non poussés vers master! :

git reset

Si vous voulez revenir sur un changement que vous avez commis, faites ceci :

git revert  

Si vous voulez supprimer les fichiers non suivis (par exemple, les nouveaux fichiers, les fichiers générés) :

git clean -f

Ou des répertoires non suivis (par exemple, des répertoires nouveaux ou générés automatiquement) :

git clean -fd
Commentaires (19)

Note : Vous pouvez également exécuter

git clean -fd

en tant que

git reset --hard

ne supprimera pas les fichiers non suivis, alors que git-clean supprimera tous les fichiers du répertoire racine suivi qui ne sont pas sous suivi git. AVERTISSEMENT - SOYEZ PRUDENT AVEC CECI ! Il est utile de faire d'abord un essai avec git-clean, pour voir ce qu'il va supprimer.

C'est aussi particulièrement utile lorsque vous obtenez le message d'erreur

~"performing this command will cause an un-tracked file to be overwritten"

Cela peut se produire lorsque vous faites plusieurs choses, l'une d'entre elles étant la mise à jour d'une copie de travail lorsque vous et votre ami avez tous deux ajouté un nouveau fichier du même nom, mais qu'il l'a committé dans le contrôle de source en premier, et que vous ne vous souciez pas de supprimer votre copie non tracée.

Dans cette situation, faire un essai vous permettra également de voir la liste des fichiers qui seront écrasés.

Commentaires (4)

Regardez dans git-reflog. Il listera tous les états dont il se souvient (par défaut, 30 jours), et vous pouvez simplement extraire celui que vous voulez. Par exemple :

$ git init > /dev/null
$ touch a
$ git add .
$ git commit -m"Add file a" > /dev/null
$ echo 'foo' >> a
$ git commit -a -m"Append foo to a" > /dev/null
$ for i in b c d e; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null
$ git reset --hard HEAD^^ > /dev/null
$ cat a
foo
b
c
$ git reflog
145c322 HEAD@{0}: HEAD^^: updating HEAD
ae7c2b3 HEAD@{1}: commit: Append e to a
fdf2c5e HEAD@{2}: commit: Append d to a
145c322 HEAD@{3}: commit: Append c to a
363e22a HEAD@{4}: commit: Append b to a
fa26c43 HEAD@{5}: commit: Append foo to a
0a392a5 HEAD@{6}: commit (initial): Add file a
$ git reset --hard HEAD@{2}
HEAD is now at fdf2c5e Append d to a
$ cat a
foo
b
c
d
Commentaires (4)