Benvenuti nella nostra guida definitiva ai comandigit merge
egit rebase
. Questo tutorial ti insegnerà tutto ciò che devi sapere sulla combinazione di più rami con Git.
Git Merge
Il comandogit merge
unirà tutte le modifiche apportate alla base di codice su un ramo separato al ramo corrente come nuovo commit.,
La sintassi del comando è la seguente:
git merge BRANCH-NAME
Per esempio, se si sta lavorando in un ramo denominato dev
e vorrei unire tutte le nuove modifiche che sono state fatte in un ramo denominato new-features
, è necessario eseguire il seguente comando:
git merge new-features
Nota: Se ci sono modifiche non salvate il vostro attuale ramo Git non permette di unire fino a quando tutte le modifiche nel codice attuale, sono stati commessi., Gestire le modifiche, è possibile:
Creare un nuovo ramo e il commit delle modifiche
git checkout -b new-branch-namegit add .git commit -m "<your commit message>"
Stash di loro
git stash # add them to the stashgit merge new-features # do your mergegit stash pop # get the changes back into your working tree
Abbandonare tutte le modifiche
git reset --hard # removes all pending changes
Git Rebase
La riassegnazione di un ramo Git è un modo per spostare l’interezza di un ramo ad un altro punto dell’albero. L’esempio più semplice è spostare un ramo più in alto nell’albero., Diciamo che abbiamo un ramo che divergeva dal ramo master al punto A:
/o-----o---o--o-----o--------- branch--o-o--A--o---o---o---o----o--o-o-o--- master
Quando si rebase è possibile spostarlo in questo modo:
/o-----o---o--o-----o------ branch--o-o--A--o---o---o---o----o--o-o-o master
Per rebase, assicurati di avere tutti i commit che vuoi nella rebase nel tuo ramo master. Controlla il ramo che vuoi rebase e digita git rebase master
(dove master è il ramo su cui vuoi rebase)., che, per esempio, un ramo che si è basata su un altro ramo (chiamiamola così) è ricalcolata sulla master:
/---o-o branch /---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master
Dopo git rebase master branch
o git rebase master
quando è stato estratto il ramo, si ottiene:
/---o-o-o-o---o--o------ feature----o--o-o-A----o---o--o-o-o--o--o- master \---o-o branch
Git rebase interattiva nella console
usare git rebase
in console con un elenco di commit si può scegliere, modificare o far cadere in rebase:
- Invio
git rebase -i HEAD~5
con l’ultimo numero può essere un qualsiasi numero di commit, dalla più recente a ritroso che si desidera rivedere., - In vim, premere
esc
, quindii
per iniziare a modificare il test. - Sul lato sinistro è possibile sovrascrivere
pick
con uno dei comandi seguenti. Se vuoi schiacciare un commit in uno precedente e scartare il messaggio di commit, inseriscif
al posto delpick
del commit. - Salva e esci dall’editor di testo.
- Quando la rebase viene interrotta, effettuare le regolazioni necessarie, quindi utilizzare
git rebase --continue
fino a quando la rebase non ha esito positivo., - Se si esegue il rebasing con successo, è necessario forzare il push delle modifiche con
git push -f
per aggiungere la versione rebased al repository remoto. - Se c’è un conflitto di unione, ci sono un certo numero di modi per risolvere questo problema, tra cui seguendo i suggerimenti in questa guida. Un modo è quello di aprire i file in un editor di testo ed eliminare le parti del codice che non si desidera. Quindi utilizzare
git add <file name>
seguito dagit rebase --continue
., Puoi saltare il commit in conflitto inserendogit rebase --skip
, interrompere la rebasing eseguendogit rebase --abort
nella tua console.
Conflitti di unione
Un conflitto di unione è quando si effettuano commit su rami separati che alterano la stessa linea in modi contrastanti.,che versione del file per mantenere un messaggio di errore simile al seguente:
CONFLICT (content): Merge conflict in resumé.txt Automatic merge failed; fix conflicts and then commit the result.
Se si guarda il resumé.txt
file nell’editor di codice, è possibile vedere dove il conflitto ha avuto luogo:
<<<<<<< HEADAddress: 808 South Street=======Address: 505 North Street>>>>>>> updated_address
Git aggiunto alcune righe al file:
<<<<<<< HEAD
=======
>>>>>>> updated_address
Git Merge vs Git Rebase
Sia git merge
e git rebase
comandi sono molto utili, e uno non è meglio dell’altro., Tuttavia, ci sono alcune differenze molto importanti tra i due comandi che tu e il tuo team dovreste prendere in considerazione.
Ogni volta che viene eseguitogit merge
, viene creato un commit di unione extra. Ogni volta che si lavora nel repository locale, avere troppi commit di unione può rendere la cronologia di commit confusa. Un modo per evitare il commit di unione è usare invecegit rebase
.
git rebase
è una funzionalità molto potente. Detto questo, è rischioso anche se non viene utilizzato nel modo giusto., git rebase
altera la cronologia di commit, quindi usala con cura. Se il rebasing viene eseguito nel repository remoto, può creare molti problemi quando altri sviluppatori tentano di estrarre le ultime modifiche al codice dal repository remoto. Ricordarsi di eseguire solo git rebase
in un repository locale.
Questo è tutto ciò che devi sapere per unire e rebase con il meglio di loro.