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>....