Git Academy

Intermédiaire · 5 min de lecture

Merge, squash ou rebase : merger une pull request

Les trois boutons de GitHub, ce qu'ils font à l'historique, et lequel choisir.

Create a merge commit

Garde chaque commit de la branche plus un commit de merge. Historique complet, mais bruyant avec les commits « fix typo ». S'annule avec git revert -m 1.

Sans risque
$ git merge --no-ff feat/dark-mode

Squash and merge

Tous les commits de la PR deviennent un seul commit sur main. Historique propre, un commit par fonctionnalité, facile à annuler. Les commits de la branche n'entrent pas dans main : supprime la branche après.

Sans risque
$ git merge --squash feat/dark-mode
$ git commit

Rebase and merge

Rejoue chaque commit au-dessus de main, sans commit de merge. Historique linéaire qui garde chaque commit : les commits de la PR doivent être propres.

Lequel choisir ?

La plupart des équipes : squash and merge (une PR = un commit). Des commits propres et bien découpés à garder : rebase and merge. Branches longues (release) : merge commit. Choisis-en un et impose-le dans les réglages du dépôt.

Après un squash merge

Ta branche locale semble « pas mergée » pour Git (commits différents). C'est normal : supprime-la avec -D une fois la PR vérifiée comme mergée.

Sans risque
$ git switch main && git pull
$ git branch -D feat/dark-mode