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
OU
git 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 !