Înțelegerea tipurilor de fuzionare

Git avansat

Amanda Crawford-Adamo

Software and Data Engineer

Sunt Amanda

O fotografie a Amandei

Git avansat

Ce este git merge?

Comanda Git Merge:

git merge
  • Combină modificările dintr-o ramură în alta
  • Găsește baza comună dintre două ramuri
  • Utilizează strategii diferite de fuzionare

Un drum unde două căi se unesc, cu două mașini pe același drum

Git avansat

Fuzionare fast-forward

Ce este fuzionarea fast-forward?

  • Menține un istoric simplu și liniar
  • Ideală pentru ramuri scurte cu modificări simple

$$

Când nu se utilizează

  • Când trebuie păstrat istoricul ramurii
  • Dezvoltare complexă în ramuri cu viață lungă
  • Conflict de fuzionare între ramuri - fast-forward eșuează imediat!
Git avansat

Fuzionare fast-forward (înainte)

Un grafic cu două ramuri: main și feature branch. Main are două commit-uri. Feature branch diverge după cel mai recent commit din main, cu un commit suplimentar.

Git avansat

Sintaxa fuzionării fast-forward

Fuzionare fast-forward implicită

git checkout main
git merge feature_branch

Forțare fuzionare fast-forward

git merge <branch> --ff-only

Exemplu

git checkout main
git merge feature_branch --ff-only
Git avansat

Fuzionare fast-forward (după)

Un grafic cu două ramuri: main și feature branch. Main are trei commit-uri. Feature branch diverge după al doilea commit din main, cu un commit suplimentar. Al treilea commit din main este o copie a celui mai recent commit din feature branch.

Git avansat

Fuzionare recursivă

Ce este fuzionarea recursivă?

  • Creează un commit de fuzionare cu doi părinți
  • Păstrează întregul istoric al proiectului
  • Ideală pentru ramuri cu viață lungă
  • Menține structura de ramificare

$$

Când nu se utilizează

  • Când se dorește un istoric simplu și liniar
  • Modificări rapide și minore
Git avansat

Fuzionare recursivă (înainte)

Un grafic cu două ramuri: main și feature branch. Main are trei commit-uri. Feature branch diverge după primul commit din main, cu două commit-uri suplimentare.

Git avansat

Sintaxa fuzionării recursive

Comanda de fuzionare recursivă:

git merge --no-ff <branch>

Exemplu

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.

$ git merge --no-ff feature_branch
Merge made by the 'recursive' strategy.
...
Git avansat

Fuzionare recursivă (după)

Un grafic cu două ramuri: main și feature branch. Main are șase commit-uri. Feature branch diverge după cel mai recent commit din main, cu două commit-uri suplimentare. Cele șase commit-uri din main sunt un amestec al commit-urilor din ambele ramuri. Cel mai recent commit din main este un obiect de fuzionare cu doi părinți: ultimul commit din feature branch și anterioarul commit din main.

Git avansat

Rezumat

  • Fuzionarea fast-forward menține istoricul simplu și liniar
  • Fuzionarea recursivă păstrează contextul istoric
  • Fuzionarea recursivă este mai potrivită pentru dezvoltare complexă

Comenzi fuzionare fast-forward

git merge <branch_name> # comandă implicită
git merge --ff-only <branch_name> # forțare fast-forward

Comandă fuzionare recursivă

git merge --no-ff <branch_name>
Git avansat

Să exersăm!

Git avansat

Preparing Video For Download...