Il y a de nombreuses façons d'annuler des changements avec Git. De même que pour les commits, annuler des changements avec Git est à la fois un aspect bas-niveau (gestion des fichiers et morceaux de fichiers) et un aspect de plus haut niveau (comment les changements sont effectivement annulés). Nous allons nous intéresser à ce dernier point.

Il y a principalement deux façons d'annuler des changements avec Git : l'une est git reset et l'autre est git revert. Nous allons maintenant voir chacune de ces façons.

Avant reset

Git before reset


git reset annule des changements en déplaçant la référence en arrière dans le temps sur un commit plus ancien. En ce sens, on peut considérer cela comme une façon de "réécrire l'histoire"; git reset fait remonter une branche en arrière comme si le(s) commit(s) n'avait jamais eu lieu.

git reset HEAD^

Après reset

Git after reset


Nice! Git a simplement déplacé la référence de la branche master en la faisant revenir sur C1; désormais notre dépôt est dans le même état que si C2 n'avait jamais eu lieu.

Bien que le reset marche parfaitement pour les branches locales sur notre propre machine, cette façon de "réécrire l'histoire" ne marche pas avec les banches distantes (remote) que d'autres personnes utilisent.

Pour pouvoir annuler des changements et partager ces annulations avec d'autres, nous devons utiliser git revert. Regardons comment cela fonctionne.

Avant revert

Git before revert


git revert HEAD

Après revert

Git after revert


Un nouveau commit est apparu en bas sous le commit que nous voulions annuler.
C'est parce que ce nouveau commit C2' introduit des modifications -- celles qui correspondent justement à l'annulation de celles du commit C2.

Avec revert, vous pouvez diffuser (push) vos modifications et les partager avec tout le monde.

Pour accomplir ce niveau, annulez les derniers commits à la fois sur local et sur pushed. Vous devez annuler en tout 2 commits (un pour chaque branche).