Da Anonimo (non verificato) , 29 Aprile 2026

Cosa significa "lineare"

Una storia lineare non ha commit di merge — ogni commit ha esattamente un genitore.

Perche la linearita conta

  • git bisect cammina su un solo percorso.
  • git log --oneline dice la verita senza --graph.
  • git revert mira a un singolo commit pulitamente.

Raggiungere la linearita localmente

git checkout feature/login
git fetch origin
git rebase origin/main
git push --force-with-lease

Far rispettare sul remoto

Configurare il proprio host Git per richiedere storia lineare.

  • Rebase and merge - riproduce i commit del branch su main individualmente.
  • Squash and merge - appiattisce il branch in un singolo commit.
  • Fast-forward only - richiede che il branch sia gia aggiornato.

Far rispettare localmente

git config --global pull.rebase true
git config --global pull.ff only
git config --global rebase.autoStash true

Squash vs rebase merge

# Squash and merge: 1 commit on main per PR
git merge --squash feature/login
git commit -m "Add OAuth login"

# Rebase and merge: every commit on main
git rebase main feature/login
git checkout main
git merge --ff-only feature/login

Rilevare storia non lineare

git log --merges
git log --first-parent --oneline