Da Anonimo (non verificato) , 29 Aprile 2026

Tre strategie, tre storie

Quando si integra un branch di feature in main, ci sono tre opzioni.

Merge commit

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

Pro: preserva la verita di come e avvenuto lo sviluppo. Contro: storia non lineare.

Squash and merge

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

Pro: storia lineare. Contro: perde il dettaglio a livello commit.

Rebase and merge

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

Pro: lineare; preserva i commit atomici. Contro: richiede disciplina.

Matrice decisionale

  • Libreria o progetto kernel-style - rebase and merge.
  • App con contributori disciplinati - rebase and merge.
  • App con discipline miste - squash.
  • Progetto dove i branch paralleli contano - merge commit.

Configurazione sull'host

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

Equivalenti locali

# 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

Reverting

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