Cosa significa "lineare"
Una storia lineare non ha commit di merge — ogni commit ha esattamente un genitore.
Perche la linearita conta
git bisectcammina su un solo percorso.git log --onelinedice la verita senza--graph.git revertmira 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