Sari la conținut
← Git & GitHub pentru developeri
Progres curs 0 / 7 lecții (0%)

Merge și conflicte

Îmbinarea (merge) aduce commit-urile dintr-un branch în altul. De cele mai multe ori e automată. Când același rând a fost modificat diferit în ambele branch-uri, ai un conflict — Git te pune să decizi tu.

Merge simplu

git switch main
git pull
git merge functie/export-pdf
# dacă nu sunt conflicte: gata, commit de merge automat (sau fast-forward)
git branch -d functie/export-pdf

Un conflict

git merge functie/x
# Auto-merging fisier.php
# CONFLICT (content): Merge conflict in fisier.php
# Automatic merge failed; fix conflicts and then commit the result.

Rezolvarea

// în fișier vezi:
<<<<<<< HEAD
$timeout = 30;          // versiunea de pe main
=======
$timeout = 60;          // versiunea de pe branch
>>>>>>> functie/x

// editezi ca să rămână varianta corectă (poate o combinație),
// ștergi marcajele <<<<, ====, >>>>, apoi:
git add fisier.php
git commit             // finalizează merge-ul

Reducerea conflictelor

  • Îmbină des main în branch-ul tău (sau rebase) ca să nu diverghezi mult.
  • Branch-uri mici și de scurtă durată.
  • Coordonare în echipă: nu doi oameni pe același fișier mare simultan.

Abandonarea

git merge --abort     # anulează merge-ul în curs, revii la starea de dinainte

Simulează un conflict

# pe main: schimbă o linie într-un fișier, commit
# creează branch de pe un main mai vechi, schimbă ACEEAȘI linie, commit
git switch main
git merge branch-ul-celalalt   # -> conflict
# rezolvi manual, git add, git commit

Exercițiu

Provoacă intenționat un conflict: modifică aceeași linie pe main și pe un branch, apoi îmbină. Rezolvă-l manual, alegând sau combinând variantele. Fă și un git merge --abort ca să vezi cum revii.

Greșeli frecvente

  • Lași marcajele <<<< / ==== / >>>> în cod și comiți așa.
  • Alegi „a mea" sau „a lor" mecanic, fără să înțelegi ambele variante.
  • Nu testezi codul după rezolvarea conflictului.
  • Panichezi la primul conflict în loc să citești marcajele — sunt simple.

De reținut

  • merge aduce commit-urile unui branch în altul.
  • Conflict = același rând modificat diferit; îl rezolvi manual.
  • Ștergi marcajele, git add, git commit.
  • Branch-uri mici + sincronizare des = mai puține conflicte.

Pe scurt

Merge-ul e de obicei automat. Conflictele sunt normale și simple: citești ambele variante, alegi corect, testezi.

Folosim cookie-uri esențiale pentru funcționarea site-ului și, cu acordul tău, cookie-uri de analiză și publicitate. Partenerii noștri, inclusiv Google, pot folosi cookie-uri pentru a afișa reclame relevante. Detalii în Politica de cookie-uri.