Git rebase vs pull: cosa fare se i commit locali e remoti divergono

di Lorenzo Neri

Git rebase vs pull: cosa fare se i commit locali e remoti divergono? Ti è mai capitato di ricevere il messaggio “your branch and origin have diverged” dopo un git rebase? Non sei solo: in questo articolo vedremo assieme come risolvere!

Perché dopo un rebase i commit divergono

Quando fai un git rebase, Git riscrive la storia dei commit applicando le modifiche su una nuova base. Questo significa che gli hash dei commit cambiano anche se il contenuto rimane lo stesso. Per questo motivo, il tuo branch locale e quello remoto vengono considerati “divergenti”.

Ma prima di approfondire l’argomento, permettimi di presentarmi! Mi chiamo Lorenzo Neri: in questo blog troverai non pochi articoli legati a git e al mondo dell’informatica! Il mio obiettivo? Aiutarmi a comprenderla nel modo più pratico possibile!

Perché non devi fare git pull

Il messaggio di Git ti suggerisce un git pull, ma farlo genererebbe un merge commit che annullerebbe il vantaggio del rebase, creando una storia più complessa e difficile da leggere. Inoltre, rischi di trovarti con commit duplicati.

Git rebase vs pull: la soluzione corretta

Dato che hai già riscritto la storia in locale, l’obiettivo è sovrascrivere quella remota. Il comando giusto è:

git push --force-with-lease

--force-with-lease è preferibile a --force perché aggiunge una sicurezza: impedisce di sovrascrivere i commit se qualcun altro ha già pushato sul branch remoto.

Tra l’altro, stando in tema a rebase e pull, forse ti potrà tornare utile esplorare la categoria di git all’interno del blog: troverai diverso materiale che ti potrà essere utile per approfondire!

Git rebase vs pull: cosa fare se i commit locali e remoti divergono in casi particolari

Alcuni casi particolari richiedono maggiore attenzione. Per esempio:

  • Branch condiviso con il team: avvisa sempre i colleghi prima di fare un push forzato.
  • Alternativa sicura: crea un nuovo branch (es. feat/adk-integration-rebased) e apri una nuova Pull Request.

Per farti un esempio:

  • Hai fatto rebase
  • I commit locali hanno nuovi hash, punto a cui fare attenzione
  • Vuoi aggiornare il remoto, prosegui con git push --force-with-lease

Cosa succede se faccio git pull dopo un rebase?

Git proverà a fare un merge tra la storia riscritta e quella vecchia, creando commit duplicati e una cronologia più complicata.

Qual è la differenza tra –force e –force-with-lease?

--force sovrascrive senza controlli, mentre --force-with-lease verifica che nessun altro abbia pushato nel frattempo. È quindi la scelta più sicura.

È sicuro usare il push forzato?

Sì, se sei l’unico a lavorare su quel branch. Se invece è condiviso, avvisa prima il tuo team per evitare di cancellare modifiche di altri.

In conclusione: quando dopo un git rebase vedi che il tuo branch locale e quello remoto sono divergenti, non fare git pull. Usa invece git push --force-with-lease per mantenere la storia pulita e lineare.

Continua a scoprire di più con questi articoli!

Lascia un commento

Questo sito potrebbe fare uso di cookie e siccome l'UE mi obbliga a fartelo presente, eccoti il classico banner dove puoi decidere come gestirli. Accetta Leggi di più