Changer le message d’un commit

Par Maxime Bréhin • Publié le 23 janvier 2025 • 2 min

Ah, le coup classique de message tapé à l’arrach’ sans vérification, à la “what the commit”. Combien de fois cela m’est-il arrivé ? Je ne saurai le dire, mais souvent !

Mais laisser un message pourri, incorrect ou incomplet, ça ne va pas avec la rigueur et la qualité attendus sur mes projets. Alors (presque) tout le temps, je corrige ! Et tu sais quoi ? Ça ne me demande qu’une malheureuse ligne de commande.

Voyons comment procéder…

Cet article fait partie de notre série pour savoir annuler, défaire et corriger.

Avant tout…

Il faut s’assurer du contexte : on doit être sur la branche contenant le commit ciblé. La raison est simple : changer un message signifie remplacer le commit par sa copie contenant le nouveau message et repositionner l’étiquette de branche.

La commande

Pour être honnête, j’ai un peu menti, ou plutôt triché ici 😅 ! Mais ne part pas, on va quand même finir avec une seule commande 😮‍💨 !

La réalité technique nous impose d’exécuter 2 commandes :

# 1. Ajout d’un commit de "correction" du message
git commit --no-verify --fixup reword:<identifiant-du-commit>
# 2. Remplacement du commit via un "rebase"
git rebase -r -i --autosquash <identifiant-du-commit>~1

La première consiste à créer un commit qui dit Je corrige le message du commit dont voici l’identifiant.

La seconde reprend l’historique depuis le commit précédent celui à modifier, mêle le commit de “correction” avec celui qui pose problème, et rejoue le reste de l’historique (s’il y en a) par dessus, pour finalement repositionner l’étiquette de branche sur cet historique “à jour”.

C’est cool, mais c’est lourd de technicité, donc autant partir sur quelque chose de plus simple ! Un alias par exemple, qui permettrait de faire simplement :

git autoreword <identifiant-du-commit>

Il suffisait de demander, voilà la commande pour renseigner globalement l’alias sur ton poste :

git config --global alias.autoreword '!git commit --fixup reword:$1 && GIT_EDITOR=true && git rebase --autosquash --interactive --rebase-merges $1~1 && echo "autoreword finished"'

Alors, c’est un chouilla plus complexe que ce que j’ai présenté plus haut, mais c’est juste pour éviter d’avoir l’éditeur qui s’ouvre 2 fois.

Que se passe-t-il une fois qu’on a lancé l’alias ? Comment renseigne-t-on le message ?

C’est simple, Git ouvre notre éditeur avec une ligne un peu technique qu’on ne doit pas toucher, un saut de ligne, et le message initial qu’on peut modifier :

amend! mon message initial râté

mon message initial râté

On change alors notre message, on enregistre, on ferme et le tour est joué (on vérifie évidemment le log).

amend! mon message initial râté

mon message qu’il est mieux !

Note pour les puristes

Dans le cas particulier où le dernier commit produit serait celui à mettre à jour, nous aurions tout intérêt à utiliser la commande

git commit --amend -m 'Nouveau message'

Ainsi, on corrigerait en une seule étape, sans besoin d’alias.

C’est très vrai, mais… tout le monde n’a pas forcément la capacité de mémoriser l’ensemble des commandes et des alternatives, et parfois, un alias qui fait “tout” peut sembler bienvenu 😁.

Tu veux aller plus loin et maîtriser pleinement les fondamentaux de Git ou être accompagné pour garantir la qualité de tes projets grâce à une bonne mise en place de Git ? On peut t’aider ou te former, il suffit de nous décrire ton besoin !
Tu peux aussi regarder le programme de notre formation "Comprendre Git" ou nous poser tes questions sur notre forum discord.