Cosa otterrai
Prenderai un branch di feature rimasto indietro rispetto a main, ne farai rebase puliti sulla nuova punta, risolverai eventuali conflitti e pusherai il branch riobasato.
Perche rebase, non merge?
Mergare main nel branch di feature produce commit di merge extra e ingarbuglia la storia.
Passo 1: configurare un sandbox
mkdir rebase-tutorial && cd rebase-tutorial
git init
echo "v1" > app.txt
git add app.txt && git commit -m "Initial"
git checkout -b feature/login
echo "login" > login.txt
git add login.txt && git commit -m "Add login"
git checkout main
echo "v2" > app.txt
git commit -am "Update app to v2"
Passo 2: rebase
git checkout feature/login
git rebase main
Passo 3: gestire conflitti
git status
git add app.txt
git rebase --continue
git rebase --abort
Passo 4: verificare
git log --oneline --graph
Passo 5: push
git push
git push --force-with-lease
Varianti comuni
git fetch origin
git rebase origin/main
git config --global pull.rebase true
git checkout main && git pull
git checkout feature/login && git rebase main
Rebase interattivo
git rebase -i main
Insidie e regole
- Mai fare rebase di branch condivisi.
- Usare
--force-with-lease. - Risolvere i conflitti nell'ordine.
- Se i conflitti sono soverchianti, abortire.
Recupero
git reflog
git reset --hard ORIG_HEAD