Capita spesso utilizzando git che il feature branch su cui si lavora non sia sincronizzato con il branch master e non si riesca ad eseguire una sincronizzazione a cause di conflitti.
Questo in genere avviene quando si prova a eseguire git rebase sul proprio feature branch, a risolvere i conflitti e a eseguire push dal ramo feature stesso al master, per poi accorgersi che master è fuori sincrono.
Insomma, un loop infinito.
SOLUZIONE
Inizializzare il rebase di master su feature branch
Portarsi sul feature branch da allineare con master. Eseguire il commit di tutte le modifiche qui presenti.
A questo punto, per inizializzare il rebase di master su feature branch, aprire una shell ed eseguire git fetch origin
. Questo sincronizza il branch master con le ultime modifiche. In rarissimi casi, potrebbe avere senso, prima di procedere oltre, eseguire un preventivo git pull
su master.
Successivamente, assicurarsi di essere sul branch su cui si vuole eseguire il rebase di master ed eseguire git rebase origin/master
(eventualmente sostituire master con il nome del ramo del proprio progetto).
Risolvere i conflitti
Risolvere nel modo più opportuno i vari conflitti che si dovessero verificare.
Ad ogni risoluzione, lanciare git add NOMEFILE
.
Una volta risolti tutti i conflitti, procedere con git rebase --continue
o in alternativa git rebase --skip
qualora git non veda modifiche nonostante la risoluzione (questo avviene ad esempio quando ci sono differenze di codifica, ma i file sono identici in tutto il resto).
Con –continue, git mostrerà il commento al commit in corso sull’editor di default. E’ possibile lasciare il commento così com’è o aggiornarlo.
Se si sta usando vi o vim come editor e ci si chiede come proseguire al termine della modifica del commento: premere ESC
sulla tastiera, poi scrivere :x
(o, in alternativa, :wq
) e infine INVIO
sulla tastiera.
Ripetere questa procedura per tutti i conflitti che si dovessero presentare nei commit successivi.
Push delle modifiche
Una volta completato il rebase, lanciare git push origin HEAD --force
.
Questo comando si occupa di inoltrare il feature branch a remoto, forzandolo a riconoscere le modifiche come corrette.
Senza il flag –force, remote continuerà a credere che non sia sincronizzato, indicando quindi conflitti di unione.
Finito!
A questo punto si è esguito il git rebase di master su feature branch, rompendo il loop infinito.
Segui @andymnc (Andrea Manconi) su Twitter per essere sempre aggiornato su guide ed articoli