Par Anonyme (non vérifié) , 29 avril 2026

Trois stratégies, trois historiques

Lors de l'intégration d'une branche feature dans main, vous avez trois options.

Merge commit

git checkout main
git merge --no-ff feature/login

Pour : préserve la vérité du développement.

Contre : historique non-linéaire.

Squash and merge

git checkout main
git merge --squash feature/login
git commit -m "Add OAuth login"

Pour : historique linéaire; un commit par feature.

Contre : perd le détail commit-level.

Rebase and merge

git checkout feature/login
git rebase main
git checkout main
git merge --ff-only feature/login

Pour : linéaire; préserve les commits atomiques.

Contre : demande de la discipline.

Matrice de décision

  • Projet style bibliothèque ou kernel - rebase and merge.
  • App avec contributeurs disciplinés - rebase and merge.
  • App avec disciplines mixtes - squash.
  • Projet où les branches parallèles importent - merge commits.

Configurer sur le host

gh api -X PATCH repos/:owner/:repo \
  -F allow_merge_commit=false \
  -F allow_squash_merge=true \
  -F allow_rebase_merge=true

Reverting

  • Merge commit : git revert -m 1 <merge-sha>.
  • Squash : git revert <squash-sha>.
  • Rebase : git revert <sha1> <sha2>....