Trois noms voisins, trois effets radicalement différents
restore, revert, reset. Trois commandes qui commencent par les mêmes lettres et qui font des choses sans rapport.
C’est probablement la plus grande source d’accidents chez les débutants — et la raison pour laquelle beaucoup finissent par recopier leur dossier avant chaque manipulation.
Il existe pourtant une méthode infaillible pour choisir. Elle tient en une question.
La question de tri
Où se trouve le changement que vous voulez annuler ?
┌───────────┐ ┌───────────┐ ┌────────────┐ ┌──────────┐
│ L'ÉTABLI │ │ LE PLATEAU│ │ LE REGISTRE│ │ LA FORGE │
│ │ │ │ │ LOCAL │ │ │
└─────┬─────┘ └─────┬─────┘ └──────┬─────┘ └─────┬────┘
│ │ │ │
restore restore reset revert
--staged (réécrit) (ajoute un
enregistrement)
| Le changement est… | La commande | Ce qu’elle fait |
|---|---|---|
| Modifié, pas encore ajouté | git restore <fichier> |
Annule vos modifications |
| Ajouté au plateau | git restore --staged <fichier> |
Le retire du plateau |
| Enregistré, pas publié | git reset |
Réécrit votre historique local |
| Publié sur la forge | git revert |
Crée un enregistrement qui l’annule |
Retenez la dernière ligne. C’est la règle d’or de cette leçon :
On réécrit ce qui est local. On ajoute par-dessus ce qui est publié.
git restore — annuler des modifications en cours
Jeter ce que vous venez de faire
git restore Logon.ps1
Le fichier revient à son état du dernier enregistrement. Vos modifications non enregistrées disparaissent.
⚠️ Cette commande est destructive et sans filet. Contrairement à presque tout le reste de Git, ce que vous annulez ici n’a jamais été enregistré : reflog ne pourra pas vous le rendre. C’est l’une des rares façons de perdre réellement du travail avec Git.
Le réflexe : git diff avant, pour voir ce que vous êtes sur le point de jeter.
Pour tout le dépôt :
git restore .
À manier avec le même sérieux.
Retirer du plateau
git restore --staged Logon.ps1
Vous aviez fait git add un peu vite. Cette commande retire le fichier du plateau sans toucher à son contenu : vos modifications sont toujours là, elles ne sont simplement plus en partance.
C’est l’opération inverse de git add, et elle est totalement sans risque.
Récupérer une ancienne version d’un fichier
Celle-ci est précieuse, et peu connue :
git restore --source=HEAD~5 -- Logon.ps1
Vous récupérez le fichier tel qu’il était cinq enregistrements plus tôt, sans toucher au reste du dépôt ni à l’historique.