Code Opération : OMBRE-ET-VERSIONS-6
OBJECTIFS :
- Effacer une erreur sans que personne ne s'en aperçoive.
- Connaître les outils de réécriture et leurs conséquences.
- Savoir quand détruire et quand falsifier.
1. git restore – RÉCUPÉRER UN FICHIER
Vous avez modifié un fichier, mais vous voulez annuler les changements avant de les avoir ajoutés (staged) ?
git restore fichier.txt
Le fichier revient à son état du dernier commit.
C’est un retour en arrière silencieux, local.
Pour annuler des changements déjà ajoutés (dans l'index) :
git restore --staged fichier.txt
Le fichier reste modifié dans le working tree, mais est retiré de la zone de staging.
2. git reset – MODIFIER L'HISTORIQUE LOCALE
Une arme à trois modes. À n'utiliser qu'en local.
git reset --soft <commit> :
Annule les commits, mais garde les modifications staged.
git reset --soft HEAD~1
Le dernier commit disparaît, ses changements sont prêts à être re-committés. Idéal pour reformuler un message.
git reset --mixed <commit> (mode par défaut) :
Annule les commits et unstaged les modifications.
git reset HEAD~1
Les changements sont toujours présents dans le working tree, mais plus dans l'index.
git reset --hard <commit> :
DANGER.
Supprime les commits et les modifications du working tree.
git reset --hard HEAD~1
Tout ce qui était dans le dernier commit et les modifications non commitées disparaît.
Pas de retour arrière possible (sauf via git reflog, si on agit vite).
3. git revert – FALSIFIER L'HISTOIRE EN TOUTE OFFICIALITÉ
Contrairement à reset, revert ne supprime pas un commit : il en crée un nouveau qui annule les changements du précédent.
git revert HEAD
Un nouveau commit apparaît, inversant les modifications du dernier commit.
L'historique reste intact, mais la correction est visible. C’est sûr pour le travail collaboratif.
4. DIFFÉRENCES ENTRE RESET ET REVERT
reset: Réécrit l'histoire. Ne pas utiliser sur des commits déjà poussés en équipe.revert: Ajoute une correction visible. Sécurisé pour les commits publics.
Choisissez : voulez-vous faire disparaître un fait, ou créer une contre-narrative ?
5. BONNES PRATIQUES EN ÉQUIPE
- Tant que vous n’avez pas poussé : vous pouvez
reset,amend, réécrire librement. - Une fois poussé : utilisez
revert. Si vousresetet forcez un push (git push --force), vous risquez de briser le dépôt des autres. --force-with-leaseest un--forceplus prudent : il vérifie que personne n'a poussé entre-temps avant d’écraser.
TRAVAUX PRATIQUES – SCÉNARIO : CORRECTION D'UNE BRÈCHE
Opération "Rétractation Silencieuse"
Partie 1 : Annuler un commit local non poussé
-
Créez un fichier
coordonnees.txtavec :Lieu : Pont Heure : 23h00Commitez :
git add . && git commit -m "Ajout du point de rendez-vous". -
Vous vous rendez compte que l'heure est erronée.
Annulez le commit mais gardez les modifications :git reset --soft HEAD~1 -
Corrigez le fichier :
Heure : 00h30. -
Recommitez avec le bon message :
git commit -m "Correction heure du rendez-vous"
Partie 2 : Corriger une erreur déjà poussée (simulation)
- Poussez ce commit sur
origin/main(simulez avec un vrai push si vous avez un dépôt distant). - Vous réalisez que le lieu aussi était compromis.
Vous ne pouvez pasreset(déjà public). Utilisezrevert:Un éditeur s'ouvre pour le message de revert. Gardez le message par défaut, sauvegardez, quittez.git revert HEAD - Un nouveau commit apparaît, annulant les changements du précédent.
- Corrigez maintenant proprement :
- Modifiez
coordonnees.txtavec les bonnes infos :Lieu : Jardin Heure : 00h30 - Commitez :
git add . && git commit -m "Nouvelles coordonnées sécurisées".
- Modifiez
- Poussez :
L'historique montre : Ajout → Annulation → Nouvelle version. Transparent et propre.
git push origin main
FIN DU MODULE 6.
Vous savez maintenant annuler, corriger, réécrire, et choisir l'outil adapté selon que vous travaillez seul ou en équipe.
La prochaine fois : travail avancé avec les références, le stash, et les hooks.
Rapport clos.