Introduction
Git dispose de différents mécanismes pour réécrire l'historique, qui incluent les commandes git commit --amend, git rebase et git reflog. La lecture de notre tutoriel vous aidera à mieux comprendre les fonctions de ces commandes et leurs particularités.
Modifier le dernier commit avec git commit --amend
Vous pouvez souvent oublier de formater votre commit, d'ajouter des fichiers au stage ou faire une erreur dans le message de commit. Ici, git commit --amend vient à la rescousse. L'exécution de cette commande vous aidera à corriger ces petites erreurs. En général, cette commande est utilisée pour modifier le dernier commit. Exécutez la commande suivante pour combiner les modifications en stage avec le commit précédent :
git commit --amendIl est important de se rappeler que, pour éviter les problèmes de collaboration, vous ne devez pas modifier les commits qui sont en cours de développement par d'autres utilisateurs.
Commande git reflog
Les « reflogs » (journaux de références) sont utilisés pour enregistrer les mises à jour effectuées sur la pointe des branches. Avec la commande git reflog, vous pouvez revenir à tous les commits, y compris ceux qui n'ont pas été référencés par une branche. Exécutez la commande ci-dessous pour afficher le journal :
git reflogLa commande git reflog possède ses propres sous-commandes, qui incluent git reflog show, git reflog expire et git reflog delete.
Git rebase
La commande git rebase est utilisée pour déplacer ou combiner une série de commits vers un nouveau commit de base. Le principal avantage de cette commande est un historique clair, ce qui est important pour un travail efficace avec Git. Il existe deux modes pour la commande git rebase : standard et interactif. En mode standard, vous pouvez utiliser git rebase pour appliquer les commits de la branche de travail actuelle sur la tête de la branche cible. Grâce au mode interactif, vous pouvez maintenir l'historique du projet propre. Pour exécuter le mode interactif, ajoutez l'option -i à git rebase :
git rebase -i <base-branch>Messages multiples
Chaque commit Git possède un message de journal qui explique ce qui s'est passé dans le commit. Lors d'un rebase interactif, vous pouvez utiliser les commandes suivantes pour modifier les messages de commit :
- Utilisez la commande
r(reword) pour mettre en pause la lecture du rebase et réécrire le message du commit individuel. - La commande
s(squash) mettra en pause tous les commits marquéss, et vous recevrez une invite pour modifier les messages de commit séparés en un seul message combiné. - La commande
f(fixup) est similaire à squash. La différence est qu'elle n'arrêtera pas la lecture du rebase pour ouvrir un éditeur et combiner les messages de commit.
Combiner les commits pour un historique propre
La commande squash spécifie les commits que vous souhaitez fusionner dans les précédents. Git ouvre l'éditeur de texte et vous invite à combiner les messages de commit spécifiques. L'infographie suivante démontre parfaitement le processus.

Les commits qui ont été modifiés avec une commande git rebase ont des identifiants différents de ceux d'origine. Si les commits précédents sont réécrits, les commits marqués avec pick auront un identifiant entièrement nouveau.
Pratique
Parmi les affirmations suivantes, lesquelles sont vraies concernant les mécanismes de réécriture de l'historique dans Git ?