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.

