Conférence de Maxime Bréhin
Voir les slides
Voir la vidéo
Lire le tuto
Rappels
- Git possède 3 zones principales : la copie de travail, l’index et le dépôt local
- L’état HEAD correspond à notre emplacement à tout instant
- Le log est l’historique final ou actuel de nos commits
- Le reflog est le cheminement (incluant les détours) jusqu’à notre position actuelle
- Le garbage collector est le fait de « dé-référencer » un commit mais sans le supprimer
Git « unstage »
git reset <le ou les fichiers / chemins>
Cette commande permet d’annuler l’ajout de fichiers modifiés.
Git « restore »
git restore <le ou les fichiers / chemins>
Il s’agit d’une nouveauté. Il fait le même travail que git reset
mais ce terme est plus clair
Autres cas ?
Pour revenir en arrière, on peut utiliser git reset --soft
.
Ex : git reset --soft <nom du commit>
permet de revenir au commit indiqué.
Il existe aussi les commandes git reset --keep
/ git reset --merge
/ git reset --hard
. Ces 3 commandes permettent de supprimer tout ce qui se trouve dans l’historique et les commits.
Voici un tableau récapitulatif des différences entre ces 3 commandes :
Reset permet de :
- corriger ou compléter mon dernier commit
- défaire les X derniers commits pour les supprimer ou les regrouper
- faire une branche dédiée pour les X derniers commits
- faire table rase des modifs en cours
J’ai commité trop vite
S’il existe un besoin de modifier ou compléter mon dernier commit, il faut faire :
git reset --soft HEAD ~1
OUgit reset --mixed HEAD ~1
Dans ces 2 cas on défait le commit tout en gardant les modifications.
La commande git commit --amend
est plus rapide pour ajouter des choses ou changer le message du dernier commit.
Regrouper les commits
Pour cela il faut se remettre sur le 1er commit avec git reset --soft <nom du 1er commit>
puis faire un git add ...
puis git commit ...
Purger toutes les modifications en cours
Afin de purger toutes les modifications en cours en défaisant la copie de travail et remettre touts les chemins versionnés à l’état de HEAD, il faut utiliser (avec prudence) git reset --hard [HEAD]
Refaire si on c’est trompé ?
git reflog
combiné à git reset
La commande reflog liste tous les emplacements parcourus par HEAD donc si on fait X pas en arrière, il est possible de les refaires en avant.
On peut défaire ou refaire ces actions :
- commit
- reset
- merge
- rebase
- …
Conclusion
La commande git reset
est extrêmement puissante mais il faut la manier avec précaution ! Attention surtout au git reset --hard
!