Git protip : ajouter en un clin d’œil des modifs oubliées à un vieux commit
Par Maxime Bréhin • Publié le 17 octobre 2022 • 2 min

This page is also available in English.

Combien de fois as-tu oublié d’ajouter un fichier pour découvrir ton erreur plus tard, après quelques commits ?

Perso, je suis un fervent défenseur des commits atomiques qui sont, je pense, une des clés de la qualité et de l’automatisation des projets (regarde par exemple Conventional Commit et Semantic Release). Du coup, je fais de mon mieux pour corriger ces commits en utilisant le rebase interactif, et je ne peux que t’encourager à faire de même (et si tu as peur du rebase, c’est que tu n’as pas suivi notre formation Git Total 😁) !

Mon objectif est de te permettre de faire ça le plus rapidement possible, que ça devienne un reflexe !

Tu connais peut-être déjà l’option git commit --fixup (ou --squash) qui crée un commit dont l’intitulé signale qu’il corrige un autre commit ? Grâce à ça, si tu lances un rebase interactif, il viendra automatiquement placer l’application du commit en fixup sous la ligne du commit à corriger 😎 !

La procédure complète

Tu ajoutes tes fichiers oubliés au stage.

Tu fais un git commit --fixup=<ref-du-commit-à-corriger>.

Tu lances ton rebase interactif en partant du commit précédent celui à corriger : git rebase --autosquash -i -r <ref-du-commit-à-corriger>~1.

Ton éditeur s’ouvre, te propose la liste des actions à réaliser avec le fixup au bon endroit. Tu n’as plus qu’à enregistrer et fermer ce fichier, et le tour est joué ! Pense à vérifier ton log pour être sûr que tout est bon, éventuellement en faisant un git show --name-only <ref-du-nouveau-commit> pour vérifier la liste des fichiers impactés par le commit corrigé.

pick 3f0714b chore(dx): setup ESLint and Prettier
fixup 61eecda fixup! chore(dx): setup ESLint and Prettier
pick 9a7cf39 chore(dx): setup Husky, lint-staged, precommit-checks, commitlint

Comme ça m’arrive de temps en temps, je me suis fait un alias “magique” 🧙‍♂️ qui consiste à appeler ces deux commandes en une fois (pour corriger un seul commit) :

# N’oublie pas d’ajouter tes fichiers dans le *stage* avant de lancer la commande
git config --global alias.autofixup '!git commit --fixup $1 && git rebase --autosquash --interactive --rebase-merges $1~1 && echo "autofixup finished"'

Et voilà !

Des astuces en veux-tu en voilà !

On a tout plein d’articles et de vidéos existants et encore beaucoup à venir. Pour ne rien manquer, tu devrais penser à t’abonner à notre newsletter, à notre chaîne YouTube, nous suivre sur Twitter ou encore mieux, à suivre notre formation du feu de dieu 🔥 : Git Total !

Découvrez nos cours vidéo ! 🖥

Nos cours vidéo sont un complément idéal et bon marché à nos articles techniques et formations présentielles. Autour de Git, de JavaScript et d’autres sujets, retrouvez des contenus de très grande qualité à des prix abordables, spécialement conçus pour lever vos plus gros points de blocage.