git / Guides

Annuler un commit Git : reset, revert ou restore ?

Décidez d’abord ce que vous souhaitez conserver : les modifications, l’historique des commits ou les deux. Vérifiez ensuite si le commit a déjà été partagé.

Les exemples utilisent Bash ; consultez les références pour les détails de votre environnement.

git — Aide-mémoire

Choisir selon l’état du travail

SituationCommandeRésultat
Retirer un fichier de l’indexgit restore --staged -- file.txtConserve les modifications du fichier.
Annuler le dernier commit local en gardant l’indexgit reset --soft HEAD~1Recule la branche d’un commit.
Inverser un commit partagégit revert <commit>Ajoute un commit qui inverse la modification.

Vérifiez git status et git log --oneline -5. Le reset présenté exige un commit parent et une branche privée. Un commit de fusion nécessite une analyse distincte : ne choisissez pas son parent principal au hasard.

Essayer un reset dans un dépôt de démonstration

Utilisez un nouveau dossier vide, en dehors du projet. L’exercice crée deux commits, retire le second de l’historique de la branche et conserve sa modification dans l’index.

git init -b main
git config user.name "DevSheet Demo"
git config user.email "demo@example.invalid"
printf "one\n" > note.txt
git add note.txt
git commit -m "First note"
printf "two\n" >> note.txt
git commit -am "Second line"
git reset --soft HEAD~1
git status --short
git diff --cached

Résultat attendu : M note.txt dans le statut court et une ligne two ajoutée dans le diff de l’index. Le fichier contient encore les deux lignes.

Inverser un commit partagé

Avec un espace de travail propre, examinez le commit et remplacez le hash d’exemple par le vôtre. Git ouvre normalement un éditeur pour le message du nouveau commit.

git show a1b2c3d
git revert a1b2c3d
git status

Des modifications ultérieures peuvent provoquer des conflits. Résolvez-les puis lancez git revert --continue, ou annulez avec git revert --abort. Le revert ne supprime ni le commit original ni un secret qu’il contenait.

Éviter de perdre des modifications

git reset --hard peut supprimer des modifications non committées et écraser des chemins non suivis qui gênent l’opération. Il n’est pas nécessaire ici.

git restore -- file.txt remplace les modifications non indexées ; --staged agit sur l’index. Si une branche a été déplacée par erreur, examinez git reflog puis créez une branche de récupération sur l’ancien commit vérifié. Reflog ne récupère pas toutes les modifications non committées.

Références

Tous les guides