Per eseguire un'unione, Git ha bisogno di scoprire cosa è successo esattamente nei due rami dall'antenato comune (A1
). Come hai detto correttamente, Git memorizza istantanee di commit/alberi in modo da ottenere un set di modifiche effettivo, deve confrontare A2
a A1
e B1
a A1
e quindi unire quelle serie di modifiche individuali.
La stessa cosa accade in un rebase. Per applicare il set di modifiche di A2
su B1
, dobbiamo prima calcolare il set di modifiche dalle differenze tra A1
e A2
. E poi possiamo applicarlo a B1
. Puoi pensare a un rebase come qualcosa di simile a una generazione automatica di file di patch. Per prima cosa genera tutti quei file di patch dal vecchio ramo e li applica quindi al corrente HEAD.
Quindi, abbiamo bisogno di tutti quei tre commit per calcolare effettivamente le differenze, in quanto non possiamo capire cosa è successo in un commit solo guardando quel commit.
grazie, è quello che stavo cercando di mostrare con la mia domanda. – worker1138