Menu
CoddyTech

Git : Fusionner des Commits (Squash)

Dernière mise à jour

Le squash combine plusieurs commits en un seul, de sorte qu'une série désordonnée de commits "wip", "corrige la faute", "cette fois c'est bon" devient un unique commit propre. L'outil habituel est le rebase interactif - git rebase -i - où tu marques les commits à regrouper. Comme le squash réécrit l'historique, fais-le avant de pousser, ou sur une branche sur laquelle tu es seul à travailler.

Essaie ces commandes dans le terminal playground - un vrai shell dans ton navigateur, rien à installer.

Le squash replie une série de petits commits en un seul commit propre via un rebase interactif.

Syntaxe

CommandWhat it does
git rebase -i HEAD~3Rebase interactif des 3 derniers commits
git rebase -i mainRebase chaque commit depuis main
git merge --squash featureFusionne les commits d'une branche en un seul lors du merge
git reset --soft HEAD~3 && git commitFusionne les 3 derniers commits sans rebase

Commandes du rebase interactif

Dans l'éditeur qui s'ouvre, remplace pick par l'une de celles-ci.

KeywordWhat it does
pickGarde le commit tel quel
squash (s)Fusionne avec le commit précédent et combine les messages
fixup (f)Fusionne mais supprime le message de ce commit
reword (r)Garde le commit mais modifie son message

Exemple concret

Fusionne les trois derniers commits en un seul avant de pousser.

StepActionResult
1git rebase -i HEAD~3Ouvre les 3 derniers commits dans l'éditeur
2Définis les commits 2 et 3 sur squashLes marque pour être fusionnés dans le premier
3Enregistre et modifie le message combinéTrois commits deviennent un commit propre

FAQ sur le squash de commits Git

Que veut dire squasher des commits ?
Squasher, c'est transformer plusieurs commits en un seul commit qui contient toutes leurs modifications. Les fichiers restent exactement les mêmes ; seul l'historique change, et les relecteurs voient un seul commit avec un seul message au lieu d'une série de petites corrections.
Comment fusionner les N derniers commits dans Git ?
Exécute git rebase -i HEAD~N (par exemple HEAD~3 pour les trois derniers). Dans l'éditeur, laisse le premier commit en pick et remplace les autres par squash (ou fixup pour supprimer leurs messages). Enregistre, modifie le message de commit combiné, et les commits se regroupent en un seul.
Quelle est la différence entre squash et fixup ?
Les deux fusionnent un commit dans le précédent. squash conserve le message du commit et te permet de le combiner avec les autres dans un éditeur. fixup supprime entièrement le message du commit et ne garde que celui du commit précédent - pratique pour les commits "oups, petite correction" que tu ne veux pas dans le message final.
Comment fusionner toute une branche lors d'un merge ?
Utilise git merge --squash feature, puis git commit. Cela applique toutes les modifications de la branche comme des changements indexés (staged) et te permet de les enregistrer en un seul commit sur la branche cible, sans reprendre les commits individuels de la branche. Le bouton "Squash and merge" de GitHub fait la même chose.
Puis-je fusionner sans rebase interactif ?
Oui. git reset --soft HEAD~N ramène la branche N commits en arrière tout en gardant toutes leurs modifications indexées (staged), puis un unique git commit les enregistre en un seul. C'est un moyen rapide de fusionner les commits les plus récents sans ouvrir l'éditeur de rebase.
Faut-il squasher ses commits avant de merger ?
Beaucoup d'équipes le font, pour que chaque fonctionnalité arrive en un seul commit, facile à lire et facile à annuler avec revert. Le prix à payer est la perte de l'historique étape par étape. Squashe librement sur une branche que tu es seul à utiliser ; sur une branche partagée, mets-toi d'accord avant, car les commits réécrits obligent tous les autres à réinitialiser leur copie.
Puis-je m'entraîner en ligne ?
Oui. Ouvre le terminal playground pour lancer un rebase interactif dans un vrai shell de ton navigateur - rien à installer. Le cours Git interactif et gratuit de Coddy couvre aussi le rebase et le nettoyage de l'historique étape par étape.
Illustration des langages de programmation de Coddy

Apprenez Git avec Coddy

COMMENCER