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-pdfUn 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-ulReducerea 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 dinainteSimulează 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.