Écrire l'histoire c'est bien, revenir dans le temps c'est mieux ! Le gros intérêt du versioning est qu'il va nous permettre de revenir en arrière en cas de problème. Pour cela on a plusieurs possibilités.
checkout
La commande checkout permet de faire plusieurs choses
- Passer de branche en branche (on en parlera dans un prochain chapitre)
- Revenir sur un fichier par rapport à un commit
-
Revenir sur un commit
git checkout
Permet de transformer le <fichier>
tel qu'il était lors du <commit>
et l'ajoute au staging.
git checkout <commit>
Transforme tous les fichiers pour reproduire l'état du <commit>
. Cette commande nous place dans un état particulier appellé detached HEAD. En résumé vous êtes revenu en arrière en tant que spectateur. Vous pouvez voir le projet tel qu'il était au moment du commit tout en ayant la possibilité de revenir dans le "présent". On utilisera cette commande pour observer des vieux commits, si on souhaite réellement revenir en arrière on utilisera plutôt la commande reset.
revert
Revert permet d'inverser un commit.
git revert <commit>
Cette commande va défaire ce qui avait été fait au moment du <commit>
en créant un nouveau commit. Cela n'altère pas l'historique mais va ajouter un nouveau commit d'inversion (les lignes ajoutées seront supprimées, les fichiers supprimés seront recréés...).
reset
Tout comme la commande checkout, la commande reset permet de faire plusieurs choses à la fois. En revanche il faudra faire très attention lors de l'utilisation de cette commande car elle altère l'historique et peut dans certains cas supprimer vos modifications (si vous voyez --hard, vérifiez 6 fois ce que vous voulez faire).
git reset <fichier>
Supprime un fichier de la zone de staging, mais ne supprime pas les modifications qui sont faites
git reset
Supprime tous les fichiers de la zone de staging, sans supprimer les modifications.
git reset --hard
Cette commande est à utiliser avec extrême précaution, elle renvoie le dossier de travail au niveau du dernier commit. Toutes les modifications non commit seront perdues.
git reset <commit>
Permet de revenir en arrière jusqu'au <commit>
, réinitialise la zone de staging tout en laissant votre dossier de travail en l'état. L'historique sera perdu (les commits suivants <commit>
seront perdus, mais pas vos modifications). Cette commande vous permet surtout de nettoyer l'historique en resoumettant un commit unique à la place de commit trop éparses.
git reset <commit> --hard
Permet de revenir au <commit>
et réinitialise la zone de staging et le dossier de travail pour correspondre. Toutes les modifications, ainsi que tous les commits fait après le <commit>
seront supprimés. À utiliser avec une extrême précaution !
La commande reset ne devra jamais être utilisée après avoir publié (push) vos modifications. En revanche, elle peut être utile pour nettoyer votre historique local avant de l'envoyer en ligne.