Contenuti del Corso
Fondamenti di GitHub
Fondamenti di GitHub
Basi del Rebase
Creazione di un Commit sul Branch main
Iniziamo creando un commit direttamente nel branch remoto main
modificando il file README.md
nel repository remoto. Questo farà sì che il branch main
e il branch feature/payment
abbiano una storia dei commit divergente.
Ecco la riga aggiunta al file:
Ecco il relativo messaggio di commit:
Comprendere il Rebasing
Come menzionato nel capitolo precedente, una volta che il branch feature è stato revisionato e testato, può e dovrebbe essere integrato nel branch main
. Fino ad ora, abbiamo utilizzato solo il comando git merge
a questo scopo. Tuttavia, un altro approccio consiste nell'utilizzare il comando git rebase
.
Rebasing è il processo di spostamento o combinazione di una sequenza di commit su un nuovo commit di base. Questo viene fatto riproducendo le modifiche da un branch su un altro branch, ottenendo così una cronologia dei commit lineare.
Quando creiamo un branch, Git tiene traccia dell'ultimo commit su entrambi i branch. Se solo un branch presenta nuove modifiche, Git può avanzare rapidamente e applicare le modifiche. Tuttavia, se entrambi i branch hanno nuove modifiche, Git crea un nuovo commit di merge, risultando in un three-way merge.
Ecco come apparirebbe un three-way merge nel nostro caso, dove C4 era l'ultimo commit sul branch feature/payment
prima del merge:
Tuttavia, le fusioni a tre vie possono complicare il debug a causa della storia ramificata e non lineare. Tramite il rebase, cambiamo la base dei nostri commit e li riproduciamo sopra la nuova base, permettendo a Git di eseguire una fusione fast-forward e mantenere una storia lineare.
Ecco un'animazione che illustra come può essere eseguito il rebase nel nostro caso (gli identificatori dei commit qui non corrispondono a quelli reali):
Quando esegui il rebase di un branch, in pratica riscrivi la sua storia. Questo significa che i vecchi commit vengono sostituiti da nuovi, che hanno identificatori diversi (hash sum) perché si basano su snapshot differenti del codice. Come mostrato nell'animazione sopra, l'identificatore del commit sul branch feature/payment
è cambiato dopo il rebase.
Grazie per i tuoi commenti!