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.

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, atunci i 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ți f în locul pick 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ă de git rebase --continue. Puteți sări peste comiterea conflictuală introducând git rebase --skip, încetați să refaceți alergând git 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.