Menu
Coddy logo textTech

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

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.
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.
Coddy programming languages illustration

Apprenez Git avec Coddy

COMMENCER