Learn

Merge ou rebase

Git

Deux façons de combiner deux branches, deux historiques différents. Choisir selon le contexte.

Quand tu veux ramener les changements d'une branche dans une autre, Git te propose deux outils : merge et rebase. Ils produisent des historiques différents, avec des avantages différents.

Merge : préserver l'historique réel

git merge prend les deux branches et crée un merge commit qui unit leurs histoires. Le graphe reste fidèle à la réalité : tu vois exactement quand la branche a divergé et quand elle a été intégrée.

shell
git switch main
git merge ma-feature

Le résultat dans git log --graph ressemble à ceci : deux lignes parallèles qui se rejoignent en un seul point. C'est lisible, traçable, et non destructif.

Rebase : linéariser l'historique

git rebase rejoue tes commits sur la pointe d'une autre branche. Le résultat : un historique parfaitement linéaire, comme si tu avais toujours travaillé après les derniers commits de main.

shell
git switch ma-feature
git rebase main

Git déplace chaque commit de ma-feature un par un, en les réappliquant après le dernier commit de main. L'historique devient une ligne droite, sans merge commit.

Comparaison rapide

MergeRebase
HistoriquePréservé, avec merge commitLinéarisé, commits réécrits
Sûr sur branche partagéeOuiNon
Lisibilité du grapheMontre les vraies branchesPropre et linéaire

Quand utiliser lequel

  • Merge : pour intégrer une feature dans main, pour garder une trace claire de ce qui vient d'où. C'est le choix par défaut dans un contexte collaboratif.
  • Rebase : pour nettoyer l'historique d'une branche locale avant d'ouvrir une pull request. Tu "rebases sur main" pour que ta PR s'applique proprement sur la dernière version du code.

Un workflow courant : tu travailles sur ma-feature, tu fais git rebase main pour te mettre à jour sans merge commit parasite, puis tu ouvres une PR. GitHub fusionne ensuite avec un merge commit officiel.

git-scm.com - git merge git-scm.com - git rebase

Coche les étapes pour débloquer la suite

Retour au cours