Aller au contenu principal

Se connecter

Sauvegarde ta progression et retrouve-la sur tous tes appareils.

Ou par email

Pas encore de compte ?

Politique de confidentialité

Annuler des modifications Git : le guide complet

Une erreur ? Un commit trop hatif ? Un bug en production ? Git dispose d'une commande pour chaque scenario d'annulation. Ce guide vous accompagne a travers toutes les options, du desindexage d'un fichier a la recuperation de commits perdus.

Reference complete

Six commandes Git, une pour chaque scenario d'annulation. Suivez l'arbre de decision pour trouver la bonne commande, puis apprenez-la en detail avec des exemples dans le terminal.

Arbre de decision : que voulez-vous annuler ?

La bonne commande Git pour annuler depend de l'emplacement de vos modifications dans le workflow Git. Posez-vous trois questions : est-ce commite ? Est-ce pushe ? Est-ce indexe ? La reponse vous oriente vers la bonne commande.

Non indexe, non commite

Fichiers modifies dans le repertoire de travail

Vous avez modifie des fichiers mais n'avez pas encore lance git add.

Utilisez git restore ou git clean

Indexe, non commite

Fichiers ajoutes a la zone d'indexation

Vous avez lance git add mais n'avez pas encore commite.

Utilisez git restore --staged

Commite, non pushe

Commits locaux uniquement

Vous avez commite mais les modifications sont encore sur votre machine.

Utilisez git reset

Commite et pushe

Modifications partagees avec l'equipe

Le commit est sur le depot distant. Reecrire l'historique causerait des problemes.

Utilisez git revert

Besoin de mettre en pause

Mettre de cote temporairement

Vous voulez mettre de cote votre travail en cours et y revenir plus tard.

Utilisez git stash

Commit perdu

Recuperer apres une operation destructive

Vous avez lance reset --hard ou supprime une branche et devez recuperer.

Utilisez git reflog

Annuler des modifications non commitees

Ces commandes agissent sur votre repertoire de travail : les fichiers que vous avez modifies mais pas encore commites. C'est le scenario d'annulation le plus simple : vous avez change quelque chose et vous voulez revenir a la derniere version commitee.

git restore — Annuler les modifications d'un fichier

git restore <fichier> remet un fichier dans son dernier etat commite. Toutes les modifications non commitees de ce fichier sont supprimees. Utilisez git restore . pour annuler toutes les modifications de tous les fichiers d'un coup. C'est le remplacement moderne de git checkout -- <fichier>.

Attention : cette operation est irreversible. Une fois le fichier restaure, les modifications supprimees sont perdues : elles n'avaient jamais ete commitees, donc Git n'en a aucune trace.

git clean — Supprimer les fichiers non suivis

git restore ne fonctionne que sur les fichiers suivis. Pour les fichiers non suivis (nouveaux fichiers que Git ne connait pas), vous avez besoin de git clean. Le flag -n effectue un essai a blanc pour previsualiser ce qui serait supprime. Le flag -f supprime reellement les fichiers, et -d inclut les repertoires.

Lancez toujours git clean -n d'abord. Comme git restore, cette commande est irreversible pour les fichiers non suivis : ils n'ont jamais ete commites.

Annuler des modifications indexees

Vous avez lance git add et un fichier se trouve maintenant dans la zone d'indexation, pret a etre commite. Mais vous avez change d'avis : vous voulez le desindexer sans perdre vos modifications.

git restore --staged — Desindexer sans perdre les modifications

git restore --staged <fichier> retire un fichier de la zone d'indexation et le remet a l'etat "modifie mais non indexe". Vos modifications dans le fichier sont conservees : seule l'indexation est annulee. C'est le remplacement moderne de git reset HEAD <fichier>.

Vous pouvez aussi combiner les deux flags : git restore --staged --worktree <fichier> desindexe le fichier et supprime les modifications en une seule operation.

Annuler des commits locaux

Vous avez commite mais pas encore pushe. Comme le commit n'existe que sur votre machine, vous pouvez reecrire l'historique en toute securite sans affecter personne d'autre. L'outil pour cela est git reset.

git reset — Deplacer HEAD en arriere

git reset deplace le pointeur de branche (HEAD) vers un commit precedent. Ce qui arrive aux fichiers depend du mode choisi :

  • --soft — Annule le commit. Les modifications restent indexees (dans l'index). A utiliser quand vous voulez modifier ou decouper un commit.
  • --mixed (defaut) — Annule le commit et l'indexation. Les modifications restent dans votre repertoire de travail. A utiliser pour reselectionner les fichiers a inclure.
  • --hard — Annule tout : commit, indexation et modifications du repertoire de travail. A utiliser avec une extreme prudence : c'est destructif.

git reset --soft : garder les modifications indexees

git reset --mixed : garder les modifications non indexees

git reset --hard : tout supprimer

Annuler des commits pushes

Une fois qu'un commit a ete pushe, il est partage avec l'equipe. Reecrire l'historique avec git reset causerait des problemes a toutes les personnes ayant deja fait un pull. L'approche sure est git revert.

git revert — Creer un commit inverse

git revert <hash> cree un nouveau commit qui fait exactement l'inverse du commit specifie. Si le commit original a ajoute une ligne, le revert la supprime. S'il a supprime un fichier, le revert le restaure. Le commit original reste dans l'historique : rien n'est reecrit.

C'est la seule methode sure pour annuler un commit sur une branche partagee. Apres le revert, vous pushez simplement le nouveau commit et vos collegues le recuperent sans conflits.

Sauvegarder temporairement son travail

Parfois, vous ne voulez pas annuler vos modifications, mais les mettre de cote un moment. Peut-etre devez-vous changer de branche pour un correctif urgent, ou vous voulez un repertoire de travail propre sans perdre votre progression.

git stash — Mettre de cote pour plus tard

git stash prend toutes vos modifications non commitees (indexees et non indexees) et les sauvegarde dans une pile. Votre repertoire de travail redevient propre. Plus tard, git stash pop restaure le dernier stash et le retire de la pile. Utilisez git stash apply a la place si vous voulez conserver le stash pour le reutiliser.

Astuce utile : git stash -u inclut les fichiers non suivis dans le stash. Et git stash list affiche tous les stashes sauvegardes pour gerer plusieurs contextes de travail en cours.

Recuperer des commits perdus

Vous avez lance git reset --hard par accident ? Supprime une branche ? Pas de panique. Si les commits ont existe, Git les conserve encore, pendant au moins 90 jours. L'outil pour les retrouver est git reflog.

git reflog — Le filet de securite de Git

git reflog affiche un journal chronologique de chaque position ou HEAD s'est trouve : commits, resets, checkouts, rebases, tout. Meme si un commit n'apparait plus dans git log, il sera dans le reflog. Trouvez le hash dont vous avez besoin et faites un reset ou un cherry-pick pour le recuperer.

Pensez au reflog comme a l'historique d'annulation de Git. Il ne suit pas les modifications au niveau des fichiers, mais les positions successives de HEAD. C'est le filet de securite ultime pour recuperer de pratiquement n'importe quelle erreur.

Voila qui couvre chaque scenario d'annulation dans Git. Le point cle a retenir : presque rien n'est vraiment perdu dans Git. Entre restore, reset, revert, stash et reflog, il y a toujours un moyen de revenir a un etat correct. Faites defiler pour voir un comparatif cote a cote de toutes les methodes.

Comparatif : toutes les methodes d'annulation Git

Un comparatif detaille de quand utiliser chaque commande, ce qu'elle affecte, et si elle est sure pour les branches partagees.

CommandeAgit surReecrit l'historiqueSure pour branche partageeConserve les modificationsIdeal pour
git restoreFichiers du repertoire de travailNonOuiNon — supprime les modificationsAnnuler des modifications locales de fichiers
git cleanFichiers non suivisNonOuiNon — supprime les fichiersSupprimer les fichiers generes ou temporaires
git restore --stagedZone d'indexation (index)NonOuiOui — conserve les modifications dans le repertoire de travailDesindexer des fichiers avant un commit
git reset --softCommitsOuiNonOui — restent indexeesModifier ou fusionner des commits locaux
git reset --mixedCommits + indexationOuiNonOui — restent dans le repertoire de travailReselectionner les fichiers a commiter
git reset --hardCommits + indexation + fichiersOuiNonNon — supprime toutSupprimer completement des experimentations locales
git revertCommits (en cree un nouveau)NonOuiOui — le commit original resteAnnuler des commits pushes en toute securite
git stashRepertoire de travail + indexationNonOuiOui — sauvegarde dans une pileMettre de cote temporairement du travail
git reflogHistorique de HEAD (lecture seule)NonOuiOui — retrouve les commits perdusRecuperer apres des operations destructives
A

GitQuest est conçu par Anaïs (nouvelle fenêtre), développeuse web et responsable pédagogique, spécialisée en formations tech et accessibilité numérique.

Questions sur l'annulation de modifications dans Git

Maitrisez chaque scenario d'annulation

GitQuest vous entraine a utiliser restore, reset, revert, stash et reflog dans des situations realistes. Pratiquez dans un bac a sable securise, sans risque pour vos vrais projets.

Commencer a pratiquer