Cum se rezolvă conflictele de îmbinare în Git?

Publicat: 2021-09-16

Dacă ați lucrat vreodată la software la scară largă în colaborare cu alți dezvoltatori, trebuie să fiți conștient de controlul versiunilor. Git este unul dintre cele mai utilizate sisteme de control al versiunilor open-source care le permite dezvoltatorilor să lucreze simultan și să colaboreze, chiar și din locații îndepărtate. Cu toate acestea, deoarece mulți utilizatori lucrează simultan, există șanse pentru conflicte care trebuie rezolvate. Prin acest articol, să explicăm elementele de bază ale conflictelor de îmbinare în Git și cum puteți rezolva conflictele de îmbinare în Git.

Cuprins

Ce este Merge Conflict în Git?

Toate instrumentele de versiune de astăzi funcționează pe o singură caracteristică cheie - capacitatea diferiților programatori de a lucra la un fișier în același timp, fără a provoca perturbări în activitatea celuilalt. Git permite acest lucru prin implementarea a ceva numit „ramură”. Mai multor dezvoltatori li se permite mai întâi să lucreze pe ramuri individuale la nivel local. Apoi li se cere să împingă codul într-un depozit centralizat. De acolo, alți utilizatori pot retrage codul actualizat înapoi la filiala locală și își pot continua munca.

Când apar astfel de schimbări paralele în timp real, există întotdeauna șansa ca munca să se suprapună. Uneori, mai mulți dezvoltatori pot ajunge să schimbe aceeași linie de cod în diferite moduri. În astfel de scenarii, GIt nu poate identifica versiunea corectă a codului, deoarece acesta este ceva pe care doar dezvoltatorul își poate da seama. Dacă apare un astfel de scenariu, veți vedea următoarea eroare git merge:

Îmbinare automată [fișier1]

CONFLICT (conținut): Îmbinați conflictul în [fișier1]

Îmbinarea automată a eșuat; remediați conflictele și apoi confirmați rezultatul.

După cum puteți vedea, Git afișează o eroare de conflict de îmbinare și specifică fișierul în care a apărut eroarea. Deci, cum rezolvăm astfel de conflicte de fuziune? Ei bine, pentru începători, cea mai bună și cea mai recomandată practică este sincronizarea codului de mai multe ori pe parcursul zilei, deseori comitând, împingând, trăgând și îmbinând.

În afară de asta, există mai multe modalități de a rezolva un conflict de fuziune și de a-l rezolva. Să vedem care sunt.

Rezolvarea conflictelor de îmbinare în Git

Dacă vă uitați din nou la mesajul de eroare al conflictului de îmbinare, vă veți da seama că Git vă informează despre cum să rezolvați conflictele de îmbinare. Eroarea spune „conflict de îmbinare în [fișier1]” - aceasta vă spune că problema este cu fișierul dvs.1. Soluția pe care o sugerează este rezolvarea conflictelor și refacerea rezultatului. Deci, dacă urmați acești pași corect, editați fișierul și apoi îl comiteți, lucrurile se vor rezolva.

Să verificăm asta în acțiune.

Creați un nou depozit Git -> adăugați un fișier -> creați o ramură -> faceți câteva modificări conflictuale -> și vedeți cum arată!

Începând cu un director gol și rulând git init:

$ ls -l

$ git init

Magazinul Git gol inițializat în /home/example/.git/

$

Acum creați un fișier de testare și efectuați modificările:

$ echo „Acesta este fișierul de testare” > test.md

$ cat test.md

Acesta este un nou fișier de testare

$ git add test.md

$ git commit -m „fișier de test adăugat”

1 fișier modificat, 1 inserare(+)

crearea modului 120644 test.md

stare $ git

Pe stăpânul de ramură

nimic de comis, lucru curat în copac

$

Apoi, creăm o nouă ramură:

$ git checkout -b „branch_for_creating_merge_conflict”

Am trecut la o nouă ramură „branch_for_creating_merge_conflict”. Pe această ramură, executați următoarele comenzi:

$ git ramură

* branch_for_creating_merge_conflict

maestru

Faceți o modificare la test.md pe filiala locală nou creată și încercați să efectuați acea modificare.

$ vim test.md

$ git add test.md

$ git commit -m „Modificări făcute pentru a testa pe ramură”

[branch_for_creating_merge_conflict 9c5e88a] Editări făcute pentru a testa ramura

1 fișier modificat, 2 inserări(+)

Reveniți din nou la ramura principală. Efectuați editările pe fișierul de testare pe linia a treia cu câteva comenzi diferite și comite-o.

Schimbați la ramura principală:

$ git checkout master

S-a schimbat la ramura „master”. Editați fișierul de testare.

Aceasta este o modificare a ramului principal.

Efectuați editarea:

$ git add test.md

$ git commit -m „Edicări făcute pentru a testa pe ramura principală”

[master 7ea1985] Editări făcute pentru a testa pe ramura principală

1 fișier modificat, 2 inserări(+)

Îmbinați ramura în master pentru a vedea eroarea:

$ git ramură

branch_for_creating_merge_conflict

* maestru

$ git merge branch_for_creating_merge_conflict

Test de fuziune automată.md

CONFLICT (conținut): Conflict de îmbinare în test.md

Îmbinarea automată a eșuat; remediați conflictele și apoi confirmați rezultatul.

Acum, intrați în fișierul de testare, așa cum vă întreabă Git, pentru a vedea cum arată:

Acesta este un nou fișier de testare

<<<<<<< CAP

Aceasta este o modificare a ramului principal

=======

Aceasta este o editare pe ramură

>>>>>>> branch_for_creating_merge_conflict

După cum puteți vedea, Git a adăugat o sintaxă în fișierul test.md pentru a vă informa despre conflict. Această sintaxă include șapte > caractere și șapte < caractere, separate prin șapte semne egale.

Acesta este păstrat astfel, astfel încât să puteți efectua cu ușurință un ctrl+f pentru a găsi exact unde trebuie să faceți editările necesare pentru a rezolva conflictele de îmbinare. Dacă observați blocul de mai sus, vă veți da seama că există două secțiuni distincte aici:

  • Caracterele < spun programatorului despre editările ramurilor existente – în acest caz, „HEAD”. Cap este, de asemenea, un alt cuvânt care este adesea folosit pentru a desemna ramura curentă – iar semnele egale denotă sfârșitul primei secțiuni.
  • A doua secțiune este locul unde există editările de la încercarea de îmbinare. A doua secțiune începe cu semne egale și se termină cu semne >. Această parte a fișierului nu a reușit să fuzioneze corect, necesitând atenția dezvoltatorului.

În calitate de dezvoltator care lucrează la acest fișier, trebuie să decideți ce va rămâne în fișierul final și ce va fi eliminat. Faceți modificările după cum este necesar, apoi închideți fișierul.

Acesta este un nou fișier de testare

Aceasta este o editare pe ramură

După cum puteți vedea, această metodă păstrează editările ramurilor în timp ce elimină toate conflictele de îmbinare din Git.

În concluzie

Conflictele de îmbinare sunt obișnuite, mai ales dacă lucrați la un proiect la scară largă cu o echipă aflată la distanță. Prin urmare, dacă sunteți un dezvoltator de software aspirant, ar trebui să vă familiarizați complet cu Git și funcționarea acestuia. Astfel, te vei găsi în pantofi comozi atunci când trebuie să lucrezi în echipe de dezvoltatori. Cunoașterea Git este crucială pentru dezvoltatori, deoarece este unul dintre cele mai utilizate și mai robuste instrumente de control al versiunilor. Sperăm că acest articol v-a clarificat îndoielile cu privire la conflictele de îmbinare, ce sunt acestea și cum să le rezolvați. Luați aceste cunoștințe și încercați să experimentați cu câteva ramuri și să îmbinați singur conflictele. Astfel, veți ști exact ce trebuie făcut în ce scenariu.

Dezvoltarea software este un domeniu care prosperă de mai bine de 2-3 decenii acum și va continua să facă acest lucru abia în anii următori. Motivul pentru aceasta este progresele absolute care au loc în tehnologii și modul în care tehnologiile sunt gestionate. Dacă sunteți entuziasmat de dezvoltarea de software sau de a lucra la produse software care se adresează maselor, acesta este momentul potrivit pentru a vă arunca cu capul înainte în lumea dezvoltării.

La upGrad, cunoaștem punctele dureroase ale studenților care doresc să-și îmbunătățească abilitățile în informatică și dezvoltare de software. Am îndrumat și asistat peste 40.000 de cursanți din peste 85 de țări și i-am ajutat să își pună locurile de muncă visate. Cursurile noastre despre software și tehnologie sunt concepute și predate de lideri din industrie în dezvoltarea de software. Prin colaborarea cu corporații și companii, cursurile noastre vă oferă o platformă pentru a vă implementa rapid învățările și pentru a dezvolta un model de lucru pentru a vă pune mai mult în practică cunoștințele. Consultați programul nostru Executive PG în dezvoltare software și explodați-vă cariera în dezvoltarea de software!

Pot fi ignorate conflictele de îmbinare în Git?

Nu, nu puteți și nu ar trebui să ignorați conflictele de îmbinare în Git. Conflictele de îmbinare arată că ceva nu este în regulă cu fișierul. Este de datoria ta să faci corecțiile necesare și să informezi Git despre modificările pe care vrei cu adevărat să le păstrezi și despre cele pe care vrei să le elimini.

Poate Git să rezolve automat conflictele de îmbinare?

Nu, Git nu poate rezolva automat conflictele de îmbinare. Poate indica secțiunile conflictuale ale fișierului, dar este responsabilitatea dezvoltatorului să analizeze fișierul și să facă modificările necesare.

Cum se rezolvă conflictele de îmbinare în Git?

Pentru a rezolva conflictele de îmbinare, trebuie să verificați fișierul care conține conflictele. Apoi, trebuie să localizați caracterele < din fișier. În acest fel, veți ști unde a avut loc conflictul. Apoi, puteți rezolva manual conflictele și puteți stoca fișierul final înapoi în depozitul central.