Bine ați venit la ghidul nostru final la git merge
și git rebase
comenzi. Acest tutorial vă va învăța tot ce trebuie să știți despre combinarea mai multor ramuri cu Git.
Table of Contents
Git Merge
git merge
comanda va îmbina orice modificări care au fost făcute la baza de cod pe o ramură separată la ramura dvs. curentă ca o nouă confirmare.
Sintaxa comenzii este următoarea:
git merge BRANCH-NAME
De exemplu, dacă lucrați în prezent într-o sucursală numită dev
și ar dori să îmbine orice modificări noi care au fost făcute într-o ramură numită new-features
, veți emite următoarea comandă:
git merge new-features
Notă: Dacă există modificări neacceptate pe filiala dvs. curentă, Git nu vă va permite să fuzionați până când nu au fost comise toate modificările din filiala dvs. curentă. Pentru a gestiona aceste modificări, puteți:
Creați o ramură nouă și comiteți modificările
git checkout -b new-branch-name
git add .
git commit -m "<your commit message>"
Ascunde-le
git stash # add them to the stash
git merge new-features # do your merge
git stash pop # get the changes back into your working tree
Abandonați toate modificările
git reset --hard # removes all pending changes
Git Rebase
Rebasarea unei ramuri în Git este o modalitate de a muta întreaga ramură într-un alt punct din copac. Cel mai simplu exemplu este mutarea unei ramuri mai sus în copac. Să presupunem că avem o ramură care a diferit de ramura principală la punctul A:
/o-----o---o--o-----o--------- branch
--o-o--A--o---o---o---o----o--o-o-o--- master
Când reinițializați, îl puteți muta astfel:
/o-----o---o--o-----o------ branch
--o-o--A--o---o---o---o----o--o-o-o master
Pentru a reface, asigurați-vă că aveți toate confirmările pe care le doriți în reluarea în ramura principală. Verificați ramura pe care doriți să o refaceți și tastați git rebase master
(unde master este ramura pe care doriți să o refaceți).
Este, de asemenea, posibil să reinstalați o altă ramură, astfel încât, de exemplu, o ramură care se baza pe o altă ramură (să o numim caracteristică) să fie rebazată pe master:
/---o-o branch
/---o-o-o-o---o--o------ feature
----o--o-o-A----o---o--o-o-o--o--o- master
După git rebase master branch
sau git rebase master
după ce ați verificat sucursala, veți obține:
/---o-o-o-o---o--o------ feature
----o--o-o-A----o---o--o-o-o--o--o- master
---o-o branch
Git rebase interactive în consolă
A folosi git rebase
în consolă, cu o listă de confirmări, puteți alege, edita sau fixa în rebase:
- introduce
git rebase -i HEAD~5
ultimul număr fiind orice număr de confirmări din cea mai recentă versiune inversă pe care doriți să o revizuiți. - În vim, apăsați
esc
, atuncii
pentru a începe editarea testului. - În partea stângă puteți suprascrie
pick
cu una dintre comenzile de mai jos. Dacă doriți să împărțiți un commit într-unul precedent și să renunțați la mesajul de commit, introducețif
în loculpick
a comiterii. - Salvați și părăsiți editorul de text.
- Când reîncărcarea este oprită, efectuați ajustările necesare, apoi utilizați
git rebase --continue
până când rebase-ul are succes. - Dacă se reinstalează cu succes, atunci trebuie să forțați cu schimbările
git push -f
pentru a adăuga versiunea rebazată la depozitul dvs. la distanță. - Dacă există un conflict de îmbinare, există mai multe moduri de a remedia acest lucru, inclusiv urmărirea sugestiilor din acest ghid. O modalitate este de a deschide fișierele dintr-un editor de text și de a șterge părțile codului pe care nu le doriți. Apoi utilizați
git add <file name>
urmată degit rebase --continue
. Puteți sări peste comiterea conflictuală introducândgit rebase --skip
, încetați să refaceți alergândgit rebase --abort
în consola ta.
pick 452b159 <message for this commit>
pick 7fd4192 <message for this commit>
pick c1af3e5 <message for this commit>
pick 5f5e8d3 <message for this commit>
pick 5186a9f <message for this commit>
# Rebase 0617e63..5186a9f onto 0617e63 (30 commands)
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but stop to edit the commit message.
# e, edit = use commit, but stop to amend or add commit.
# s, squash = use commit, meld into previous commit and stop to edit the commit message.
# f, fixup = like "squash", but discard this commit's log message thus doesn't stop.
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
Combinați conflictele
Un conflict de fuziune este atunci când faceți confirmări pe ramuri separate care modifică aceeași linie în moduri conflictuale. Dacă se întâmplă acest lucru, Git nu va ști ce versiune a fișierului trebuie păstrată într-un mesaj de eroare similar cu următorul:
CONFLICT (content): Merge conflict in resumé.txt Automatic merge failed; fix conflicts and then commit the result.
Dacă te uiți la resumé.txt
în editorul de cod, puteți vedea unde a avut loc conflictul:
<<<<<<< HEAD
Address: 808 South Street
=======
Address: 505 North Street
>>>>>>> updated_address
Git a adăugat câteva linii suplimentare la fișier:
<<<<<<< HEAD
=======
>>>>>>> updated_address
A se gandi la =======
ca linie despărțitoare a conflictului. Totul între <<<<<<< HEAD
și =======
este conținutul ramurii actuale către care se referă HEAD ref. Pe de altă parte, totul între =======
și >>>>>>> updated_address
este conținutul din ramură care este fuzionat, updated_address
.
Git Merge vs Git Rebase
Ambii git merge
și git rebase
sunt comenzi foarte utile și una nu este mai bună decât cealaltă. Cu toate acestea, există câteva diferențe foarte importante între cele două comenzi pe care dvs. și echipa dvs. ar trebui să le luați în considerare.
Oricând git merge
este executat, este creată o comitere de îmbinare suplimentară. Ori de câte ori lucrați în depozitul dvs. local, dacă aveți prea multe comitere de îmbinare, puteți face ca istoricul de comiteri să pară confuz. O modalitate de a evita comiterea de îmbinare este utilizarea git rebase
in schimb.
git rebase
este o caracteristică foarte puternică. Acestea fiind spuse, este riscant precum și dacă nu este utilizat în mod corect. git rebase
modifică istoricul comiterilor, așa că folosiți-l cu grijă. Dacă refacerea se face în depozitul la distanță, atunci poate crea o mulțime de probleme atunci când alți dezvoltatori încearcă să extragă cele mai recente modificări de cod din depozitul la distanță. Nu uitați să alergați numai git rebase
într-un depozit local.
Asta este tot ce trebuie să știți pentru a fuziona și a reface cu cele mai bune dintre ele.