Non riesco proprio a capirlo. Ho letto molto sul web e sui libri e qualcosa non mi sta proprio nella testa. Qualcuno può darmi la versione fittizia di quanto segue:
- git fetch vs pull
- git merge vs rebase
Non riesco proprio a capirlo. Ho letto molto sul web e sui libri e qualcosa non mi sta proprio nella testa. Qualcuno può darmi la versione fittizia di quanto segue:
Risposte:
fetch
scaricherà eventuali modifiche dal ramo remoto *, aggiornando i dati del repository, ma lasciando invariato il ramo locale *.
pull
eseguirà un fetch
e inoltre merge
le modifiche nella tua filiale locale.
Qual è la differenza? pull
aggiorna la tua filiale locale con le modifiche dalla filiale estratta. A fetch
non fa avanzare la tua filiale locale.
Data la seguente storia:
C --- D --- E locale / A --- B --- F --- G telecomando
merge
unisce due storie di sviluppo insieme. Lo fa riproducendo le modifiche che si sono verificate sul ramo locale dopo che si è discostato sul ramo remoto e registra il risultato in un nuovo commit. Questa operazione conserva gli antenati di ciascun commit.
L'effetto di a merge
sarà:
C --- D --- E locale / \ A --- B --- F --- G --- H remoto
rebase
prenderà i commit esistenti nella tua filiale locale e li riapplicerà in cima alla filiale remota. Questa operazione riscrive gli antenati dei tuoi commit locali.
L'effetto di a rebase
sarà:
C '- D' - E 'locale / A --- B --- F --- G telecomando
Qual è la differenza? A merge
non cambia la discendenza dei commit. A rebase
riscrive gli antenati dei tuoi impegni locali.
*
Questa spiegazione presuppone che il ramo corrente è un ramo locale, e che il ramo specificato come argomento fetch
, pull
, merge
, o rebase
è un ramo remoto. Questo è il solito caso. pull
, ad esempio, scaricherà tutte le modifiche dal ramo specificato , aggiornerà il repository e merge
le modifiche nel ramo corrente .
Fetch vs Pull
Git fetch aggiorna semplicemente i dati del tuo repository, ma un git pull eseguirà sostanzialmente un recupero e quindi unirà il ramo estratto
Qual è la differenza tra 'git pull' e 'git fetch'?
Unisci vs Rebase
dal blog Atlassian SourceTree, unisci o ripristina :
La fusione unisce due linee di sviluppo, preservando al contempo la discendenza della storia di ciascun commit.
Al contrario, il rebasing unifica le linee di sviluppo riscrivendo le modifiche dal ramo di origine in modo che appaiano come figli del ramo di destinazione, fingendo effettivamente che tali commit siano stati scritti sempre sopra il ramo di destinazione.
Inoltre, dai un'occhiata a Learn Git Branching , che è un bel gioco che è stato appena pubblicato su HackerNews ( link per pubblicare ) e insegna molti trucchi di ramificazione e fusione. Credo che sarà molto utile in questa materia.
git merge <remote>/<branch>
. per esempio, se sei il ramo principale e il tuo telecomando è chiamato origine, puoi farlo git merge origin/master
.
pull vs fetch :
Il modo in cui lo capisco è che git pull
è semplicemente git fetch
seguito da git merge
. Vale a dire recuperare le modifiche da un ramo remoto e quindi unirle nel ramo corrente.
unione vs rebase :
Una fusione farà come dice il comando; unire le differenze tra il ramo corrente e il ramo specificato (nel ramo corrente). Vale a dire il comando git merge another_branch
si fonderà another_branch
nel ramo corrente.
Un rebase funziona in modo un po 'diverso ed è abbastanza bello. Diciamo che esegui il comando git rebase another_branch
. Git troverà prima l'ultima versione comune tra il ramo corrente e another_branch
. Vale a dire il punto prima che i rami divergessero. Quindi git sposterà questo punto divergente alla testa del another_branch
. Infine, tutti i commit nel ramo corrente dal punto divergente originale vengono riprodotti dal nuovo punto divergente. Questo crea una storia molto pulita, con meno rami e fusioni.
Tuttavia, non è privo di insidie! Dato che la cronologia delle versioni è "riscritta", dovresti farlo solo se il commit esiste solo nel tuo repository git locale. Cioè: non farlo mai se hai trasferito i commit a un repository remoto.
La spiegazione sulla riformulazione fornita in questo libro online è abbastanza buona, con illustrazioni di facile comprensione.
tirare con rebasing invece di unire
In realtà sto usando abbastanza rebase, ma di solito è in combinazione con pull:
git pull --rebase
recupererà le modifiche remote e quindi rifaserà invece di unire. Vale a dire ripeterà tutti i tuoi commit locali dall'ultima volta che hai eseguito un pull. Lo trovo molto più pulito rispetto a un normale pull con la fusione, che creerà un ulteriore impegno con le fusioni.
Unisci : il ramo HEAD genererà un nuovo commit, preservando l'antenato di ogni cronologia di commit. La storia può essere inquinata se i commit di unione sono fatti da più persone che lavorano nello stesso ramo in parallelo.
Rebase : riscrive le modifiche di un ramo su un altro senza creare un nuovo commit. La cronologia del codice è semplificata, lineare e leggibile ma non funziona con le richieste pull, perché non puoi vedere quali modifiche minori sono state apportate da qualcuno.
Vorrei utilizzare git merge
quando ho a che fare con il flusso di lavoro basato sulle funzionalità o se non ho familiarità con rebase. Ma, se voglio una storia più pulita e lineare, allora git rebase
è più appropriato. Per maggiori dettagli assicurati di dare un'occhiata a questo articolo di unione o rebase .