Polar Code 🎭

Command Palette

Search for a command to run...

06
Pièce N°06

MODULE 6 – ANNULER ET CORRIGER DES ERREURS

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 vous reset et forcez un push (git push --force), vous risquez de briser le dépôt des autres.
  • --force-with-lease est un --force plus 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é

  1. Créez un fichier coordonnees.txt avec :

    Lieu : Pont
    Heure : 23h00
    

    Commitez : git add . && git commit -m "Ajout du point de rendez-vous".

  2. Vous vous rendez compte que l'heure est erronée.
    Annulez le commit mais gardez les modifications :

    git reset --soft HEAD~1
    
  3. Corrigez le fichier : Heure : 00h30.

  4. Recommitez avec le bon message :

    git commit -m "Correction heure du rendez-vous"
    

Partie 2 : Corriger une erreur déjà poussée (simulation)

  1. Poussez ce commit sur origin/main (simulez avec un vrai push si vous avez un dépôt distant).
  2. Vous réalisez que le lieu aussi était compromis.
    Vous ne pouvez pas reset (déjà public). Utilisez revert :
    git revert HEAD
    
    Un éditeur s'ouvre pour le message de revert. Gardez le message par défaut, sauvegardez, quittez.
  3. Un nouveau commit apparaît, annulant les changements du précédent.
  4. Corrigez maintenant proprement :
    • Modifiez coordonnees.txt avec les bonnes infos :
      Lieu : Jardin
      Heure : 00h30
      
    • Commitez : git add . && git commit -m "Nouvelles coordonnées sécurisées".
  5. Poussez :
    git push origin main
    
    L'historique montre : Ajout → Annulation → Nouvelle version. Transparent et propre.

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.