Versioning avec Git & GitHub · Étape 08

Annule un commit partagé avec revert

Crée un nouveau commit inverse au lieu de réécrire l’historique déjà publié.

Durée indicative · ~1 h 20Niveau intermédiairePrérequis conseillé · Leçon 7 — reset soft, mixed et hardPratique · TP
L’idée reçue

« Pour annuler un commit, il faut supprimer ce commit. »

Dans un historique partagé, git revert conserve le passé et ajoute une nouvelle décision visible.

01Observe le mauvais commit

cd /tmp/soria-git-undo-$USER/revert
git log --oneline -3
git show HEAD
cat service.conf

02Crée le patch inverse

git revert --no-edit HEAD
git log --oneline -4
git show HEAD
cat service.conf

Le commit incorrect reste dans l’historique. Le nouveau commit inverse son patch et restaure feature=enabled.

03Vérifie sans supposer

git diff HEAD~2 HEAD -- service.conf
git status --porcelain
git log --format='%h %s' -4

Le résultat fonctionnel peut revenir à un état antérieur, mais l’historique contient maintenant l’incident et son annulation.

04Annule un commit nommé

bad_commit=$(git log --format='%H %s' | awk '/unsafe service value/{print $1; exit}')
git show "$bad_commit"
git revert --no-commit "$bad_commit"
git diff --cached
git restore --staged --worktree .

–no-commit prépare le patch inverse sans créer immédiatement le commit. Il permet une inspection ou l’agrégation contrôlée de plusieurs reverts.

05Comprends le conflit de revert

Si les mêmes lignes ont évolué depuis le commit ciblé, Git peut refuser l’application automatique. Inspecte alors git status, résous le contenu, ajoute les fichiers puis continue avec git revert –continue. Pour abandonner, utilise git revert –abort.

06Choisis entre reset et revert

Situation
Choix habituel
Raison
commit local non partagé
reset possible
réécriture encore privée
commit déjà partagé
revert
historique commun conservé
secret exposé
rotation immédiate puis procédure dédiée
revert ne retire pas le secret du passé
Challenge autonome

Rédige la décision d’annulation

À partir d’un commit publié défectueux, fournis le hash ciblé, le patch inverse, les tests après revert et la raison pour laquelle reset n’est pas approprié.

Ce que tu retiens

Revert annule par un nouveau commit. Il est adapté à l’historique partagé, traçable et révisable.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.