Réécrire l'historique Git, c'est possible, à condition de savoir
exactement ce que vous touchez. Ces 3 guides couvrent les modifications
d'historique les plus courantes : nettoyer des commits avant de pusher,
comprendre ce que fait réellement reset, et gérer des merges complexes.
La règle d'or reste constante : réécrire est sûr sur ce qui n'est pas encore partagé. Dès qu'un commit est pushé et que d'autres l'ont récupéré, la réécriture engendre des conflits pour toute l'équipe.
Quand utiliser chaque outil ?
Section intitulée « Quand utiliser chaque outil ? »| Besoin | Outil | Guide |
|---|---|---|
| Fusionner plusieurs commits en un seul | git rebase -i → squash / fixup | Réécrire l'historique |
| Reformuler le message d'un commit passé | git rebase -i → reword | Réécrire l'historique |
| Supprimer un fichier sensible de tout l'historique | git filter-repo | Réécrire l'historique |
Comprendre ce que fait reset --hard | Les 3 arbres Git | Reset démystifié |
| Annuler un merge raté | git merge --abort | Merge avancé |
| Éviter de re-résoudre le même conflit | git rerere | Merge avancé |
Les trois guides du module
Section intitulée « Les trois guides du module »Réécrire l'historique enseigne le rebase interactif
(squash, fixup, reword, edit, drop) et git filter-repo pour supprimer un
fichier sensible de tout l'historique. Reset démystifié
explique les 3 arbres de Git (HEAD, Index, Working Dir) et les modes
--soft, --mixed et --hard, pour comprendre ce que reset fait vraiment
avant de l'utiliser. Merge avancé apprend à annuler un
merge, à employer -Xours et -Xtheirs, merge --squash et rerere pour
mémoriser les résolutions de conflits.
À retenir
Section intitulée « À retenir »git rebase -i HEAD~Nouvre un éditeur pour réordonner, fusionner ou supprimer les N derniers commits, uniquement sur des commits locauxgit reset --soft HEAD~1annule le dernier commit mais garde les modifications stagées, pratique pour re-structurergit reset --hard HEAD~1annule le commit ET les modifications, récupérable viagit reflogpendant 30 jours, le commit écarté n'étant plus accessible depuis aucune référencegit rereremémorise les conflits résolus et les applique automatiquement lors des prochains merges identiquesgit filter-repo(et nongit filter-branch) est l'outil recommandé pour réécrire tout l'historique