Git è un sistema di controllo della versione distribuito, uno strumento per tenere traccia delle modifiche apportate a un insieme di file o per coordinare il lavoro nel tempo. Viene spesso utilizzato dai programmatori per coordinare le modifiche al codice sorgente del software e la parte migliore; può essere usato per tracciare qualsiasi tipo di contenuto. È progettato specificamente per gestire qualsiasi cosa, da piccoli a grandi progetti di volume con la massima rapidità ed efficienza. È estremamente flessibile nel senso che le persone possono condividere il lavoro direttamente tra i loro repository personali e i gruppi possono coordinare il loro flusso di lavoro attraverso un repository centrale. Permette semplicemente a due sviluppatori che si siedono in due luoghi diversi di creare e registrare le modifiche in modo indipendente, il tutto senza un repository centrale.
L'unione è una pratica comune in Git utilizzata per integrare i cambiamenti da un ramo all'altro. Git merge è un comando che esegue il commit delle modifiche in un'altra posizione. Permette agli sviluppatori di prendere le loro linee di codice indipendenti create dal ramo Git e integrarle in un singolo ramo. Questo modifica solo il ramo di destinazione mentre la cronologia del ramo di origine rimane. Git rebase è un altro comando usato fondamentalmente per lo stesso scopo, tranne che lo fa in modo abbastanza diverso. Entrambi fanno la stessa cosa - incorporano i commit da un ramo all'altro - ma la differenza sta nel modo in cui lo fanno. Evidenziamo alcuni punti distintivi chiave che confrontano i due.
Git merge è un comando che unifica due o più rami della cronologia dei commit. Un'unione spesso unisce solo due rami, sebbene Git supporti la fusione di tre, quattro o più rami contemporaneamente. Git merge è usato da Git pull per incorporare le modifiche da un ramo all'altro o da un altro repository del tutto. L'unione deve avvenire all'interno di un singolo repository, il che significa che tutti i rami che devono essere uniti devono essere presenti nello stesso repository. Le situazioni di unione derivano in genere da due o più utenti che tentano di aggiornare il codice comune. Più comunemente, un utente unisce un ramo in un altro ramo nel proprio repository locale in un ambiente locale. Git merge in modo specifico integra i contenuti di un ramo di origine con un ramo di destinazione. Il ramo di destinazione viene modificato, mentre il ramo di origine rimane.
Git rebase è un'altra alternativa alla fusione utilizzata per integrare un altro ramo con il ramo in cui si sta attualmente lavorando, tranne che mantiene una cronologia di commit lineare. Lo scopo di Git rebase è spostare un ramo da una posizione a un'altra. Dato che i commit sono immutabili, non possono essere spostati, quindi questo implica fare nuovi commit con gli stessi changeset e metadati. Un rebase cambia radicalmente la nozione di quando e dove è stata sviluppata una sequenza di commit, il che comporta la perdita di alcuni aspetti della storia dello sviluppo. Ciò significa che il commit originale su cui si basava originariamente lo sviluppo verrà modificato. Incorpora in modo efficace tutti i nuovi commit nel ramo master riscrivendo la cronologia. Di conseguenza, crea nuovi commit per ogni commit nel ramo originale.
- Sebbene sia la fusione che il rebase sono i metodi più comuni per integrare i cambiamenti in Git e hanno lo stesso scopo: combinare più rami in uno solo: la differenza sta nel modo in cui la raggiungono. Git merge integra i contenuti di un ramo di origine con un ramo di destinazione, preservando l'ascendenza di ogni cronologia di commit, mentre Git rebase incorpora tutti i nuovi commit nel ramo master riscrivendo la cronologia creando nuovi commit per ogni commit nel ramo di origine.
- Con Git merge, devi prima passare al ramo da unire e quindi usare il comando di unione per selezionare un ramo da unire. Dato che un ramo punta a un commit e che un commit è la granularità con cui si modificano le modifiche, la fusione il comando si fonde al ramo o al livello di commit. Rebase, d'altra parte, è un po 'diverso. Prima devi selezionare un ramo da rebase e poi usare il comando rebase per selezionare dove metterlo.
- L'unione crea un nuovo commit che rappresenta l'unione tra due rami. Integra i cambiamenti da diverse linee parallele di sviluppo (rami) creando un commit di unione. Lo scopo è quello di unire due o più rami insieme, compresi tutti i cambiamenti dal punto di divergenza nel ramo attuale. Avanzamento rapido è il comportamento di unione predefinito in Git. La ridefinizione, d'altra parte, modifica i singoli commit riscrivendo la cronologia del progetto creando nuovi commit per ogni commit nel ramo originale, che a sua volta genera una cronologia lineare senza rami divergenti.
- Git merge non cambia la cronologia, preservando il contesto del ramo che significa che i rami esistenti non vengono modificati in alcun modo. Crea un nuovo commit (a meno che non sia un'unione avanti veloce), ma i commit rimangono raggiungibili dal ramo. Git rebase, d'altra parte, ottimizza una storia potenzialmente complessa. I commit vengono riscritti, le vecchie versioni vengono dimenticate e il DAG delle revisioni viene modificato. I commit non sono più raggiungibili con rebase, il che significa che non sei più in grado di rebase i rami pubblicati.
Bene, in poche parole, sia l'unione che il rebase sono i due modi per integrare i cambiamenti in Git, ma differiscono nel modo in cui lo fanno. Unisci è un'operazione in un'unica fase con una posizione per risolvere i conflitti e i commit raggiungibili dal ramo rimangono raggiungibili. Rebase, d'altra parte, riapplica ogni commit individualmente riscrivendo la cronologia creando nuovi commit per ogni commit nel ramo sorgente. Quindi, quello che una volta era raggiungibile non è più raggiungibile. Una base cambia sostanzialmente la nozione di quando e dove è stata sviluppata una sequenza di commit.