Drei Strategien, drei Historien
Beim Integrieren eines Feature-Branches in main haben Sie drei Optionen.
Merge Commit
git checkout main
git merge --no-ff feature/login
Pro: bewahrt die Wahrheit der Entwicklung. Contra: nicht-lineare Historie.
Squash and merge
git checkout main
git merge --squash feature/login
git commit -m "Add OAuth login"
Pro: lineare Historie. Contra: verliert Commit-Detail.
Rebase and merge
git checkout feature/login
git rebase main
git checkout main
git merge --ff-only feature/login
Pro: linear; bewahrt atomare Commits. Contra: erfordert Disziplin.
Entscheidungsmatrix
- Bibliothek oder Kernel-Style-Projekt - rebase and merge.
- App mit disziplinierten Mitwirkenden - rebase and merge.
- App mit gemischten Disziplinen - squash.
- Projekt, wo parallele Branches zahlen - merge commits.
Auf dem Host konfigurieren
gh api -X PATCH repos/:owner/:repo \
-F allow_merge_commit=false \
-F allow_squash_merge=true \
-F allow_rebase_merge=true
Lokale Aquivalente
# Merge commit
git merge --no-ff feature
# Squash
git merge --squash feature && git commit
# Rebase and FF
git rebase main feature
git checkout main
git merge --ff-only feature
Reverten
- Merge commit:
git revert -m 1 <merge-sha>. - Squash:
git revert <squash-sha>. - Rebase:
git revert <sha1> <sha2>....