Aller au contenu principal
Dev Serein
Retour aux solutions
GitIntermédiaire

Git : annuler un commit local ou déjà poussé

Choisir entre reset, revert et restore pour annuler un commit Git tout en conservant le travail utile.

Commit local : reset. Commit partagé : revert. Choisissez votre cas ci-dessous, depuis le dépôt Git concerné.

Choisir la bonne méthode

Situation Méthode Résultat
Dernier commit local, à refaire git reset --soft HEAD~1 Retire le commit et conserve les changements dans l’index
Dernier commit local, à retravailler fichier par fichier git reset --mixed HEAD~1 Retire le commit et conserve les changements hors de l’index
Commit déjà poussé ou partagé git revert SHA_DU_COMMIT Ajoute un commit qui inverse ses changements
Fichier ajouté à l’index par erreur git restore --staged chemin/du/fichier Retire le fichier de l’index sans effacer son contenu

HEAD~1 désigne le parent du dernier commit : ces exemples de reset supposent un commit ordinaire, qui possède un parent. Pour annuler le premier commit du dépôt ou un commit de fusion, ne les appliquez pas tels quels.

Vérifier avant de toucher à l’historique

git status
git log -5 --oneline --decorate
git diff
git diff --cached

Vérifiez la branche active et les changements non commités. Avant un revert, enregistrez le travail en cours dans un commit distinct ou mettez-le de côté avec git stash push -u -m "Avant annulation". Le stash avec -u inclut les fichiers non suivis, mais pas les fichiers ignorés.

Pour garder un repère vers les commits actuels :

git branch sauvegarde-avant-annulation

Choisissez un autre nom si cette branche existe déjà. Cette branche protège les commits, pas les modifications non enregistrées. Si vous hésitez sur le partage du commit, préférez revert.

Refaire le dernier commit local

Pour retirer le commit tout en gardant ses changements prêts à être commités :

git reset --soft HEAD~1
git diff --cached

Corrigez les fichiers nécessaires, puis ajoutez uniquement ceux qui doivent entrer dans le nouveau commit :

git add chemin/du/fichier
git commit -m "Corriger la validation du formulaire"

Si vous préférez repartir avec les changements hors de l’index, utilisez à la place git reset --mixed HEAD~1. Ne lancez pas les deux resets successivement : vous reculeriez de deux commits.

Pour corriger seulement le message du dernier commit local, git commit --amend suffit. Attention : les changements déjà présents dans l’index seront également inclus.

Annuler un commit déjà partagé

Copiez l’identifiant du commit depuis git log, puis remplacez SHA_DU_COMMIT :

git show --stat SHA_DU_COMMIT
git revert SHA_DU_COMMIT

Git ouvre l’éditeur pour confirmer le message. Le commit d’origine reste dans l’historique ; un nouveau commit annule ses effets. Après vérification, poussez cette correction avec le workflow habituel du dépôt.

En cas de conflit, ouvrez les fichiers signalés par git status, retirez les marqueurs de conflit et gardez le contenu attendu :

git add chemin/du/fichier-corrige
git revert --continue

Pour abandonner le revert en cours :

git revert --abort

Un commit de fusion demande de choisir un parent avec l’option -m. Ce choix influence les fusions futures : examinez ses parents et consultez la documentation avant de l’annuler.

Vérifier le résultat

git status
git log -3 --oneline
git show --stat HEAD

Lancez les tests ou reproduisez le comportement corrigé. Si vous aviez créé un stash, retrouvez-le avec git stash list et appliquez l’entrée correspondante avec git stash apply ; supprimez-la seulement après avoir vérifié le travail récupéré.

Évitez reset --hard pour cette opération : il peut effacer les modifications de fichiers suivis. Un push forcé peut également remplacer l’historique utilisé par vos collègues. Si un commit a disparu, consultez Récupérer un commit perdu.

Ressources

SUPER CALCULATEUR / CONNEXION ÉTABLIE

UN PASSAGE SECRET DANS DEV SEREIN

Bienvenue sur
Code Lyoko.

Le monde virtuel n’était qu’à quelques lettres.
Jérémie a ouvert la connexion. À toi de jouer.

Des arbres infinis, des chemins suspendus. Garde un œil sur la mer numérique.

LYOKO-GUERRIERS

Aelita · Yumi · Ulrich · Odd

SCAN DU TERRITOIREFORÊT / 01

ALERTE XANA · TOUR ACTIVÉE

On compte sur toi, Aelita.