Introducere pentru soluționarea conflictelor de combinare în GIT

Gestionarea contribuțiilor pentru rezolvarea conflictelor între mai mulți dezvoltatori distribuți este unul dintre principalele joburi ale sistemelor de control al versiunilor. Pentru a rezolva conflictele de îmbinare, trebuie mai întâi să înțelegem exact ce este. Ea apare în timpul contopirii diferitelor versiuni ale aceluiași cod și este gestionată de sistemul de control al versiunilor, mai ales când un dezvoltator șterge un fișier în timp ce un alt dezvoltator îl modifica în continuare sau când mai multe persoane încearcă să modifice aceeași linie într-un fișier. În acest articol, vom cunoaște mai multe despre conflictele de fuziune Git, ce anume îl provoacă și cum pot fi rezolvate.

Ce este unirea conflictului în GIT?

Git a făcut fuzionarea foarte ușoară, deoarece integrează automat noi modificări folosind comanda git merge. În caz de conflict, numai dezvoltatorul care fuzionează este conștient de conflict, în timp ce ceilalți nu știu. Deci, ceea ce face Git este, oprește procesul de fuziune și indică fișierul ca având conflicte. Dezvoltatorul găsește apoi și rezolvă conflictul. Conflictele în timpul fuziunii pot avea loc în moduri descrise mai jos:

  • Eșecul la pornirea Merge

În cazul în care există modificări în așteptare în directorul de lucru al proiectului curent, o fuziune poate eșua, deoarece acestea pot fi suprascrise de comitele în timpul fuziunii. Dar poate fi stabilizat folosind diverse comenzi git precum git checkout / stash / reset / commit.

  • Eșecul în timpul fuziunii

Dacă există un eșec în timpul fuziunii, indică faptul că există un conflict între sucursala care este fuzionată și sucursala curentă. Deși Git încearcă să îmbine fișierele fără conflicte, dar dacă nu poate face acest lucru, vă va lăsa să îl rezolvați manual.

Cum se creează un conflict de îmbinare a fișierelor?

Să luăm un exemplu pentru a arăta / rezolva conflictul de îmbinare în GIT folosind interfața Git a liniei de comandă.

$ mkdir git-merge-test
$ cd git-merge-test
$ git init
$ echo "Mess with this content" > new_merged.txt
$ git add new_merged.txt
$ git commit -am"Committed the earlier content"
(master (root-commit) d58f73b) Committed the earlier content
1 file changed, 1 insertion(+)
create mode 200548 new_merged.txt

Să vedem linie cu rând ce se întâmplă în fragmentul de comenzi de mai sus.

  • git-merge-test creează un nou director și inițializează un nou depozit Git.
  • Apoi, creați un fișier text numit new_merged.txt cu ceva scris pe el.
  • Adăugați textul recent făcut la repo și apoi angajați-l.

Avem acum un nou depozit cu o ramură principală și un fișier new_merged.txt cu un anumit conținut în acesta. Apoi, creăm o altă ramură care va intra în conflict cu fuziunea.

$ git checkout -b newbranch
$ echo "New content" > new_merged.txt
$ git commit -am"Same named file is edited to cause a conflict"
(newbranch 6282319) Same named file is edited to cause a conflict
1 file changed, 1 insertion(+), 1 deletion(-)

Pentru a vă dezamăgi, rândurile de mai sus:

  • creează și verifică un noubranch numit newbranch.
  • suprascrie conținutul fișierului new_merged.txt.
  • și, în sfârșit, angajează conținutul nou creat.

Cu newbranch-ul numit o ramură, se creează un commit care suprascrie conținutul în new_merged.txt

$ git checkout master
Switched to branch 'master'
$ echo "Append" >> new_merged.txt
$ git commit -am"Content appended new_merged.txt"
(master 24fbe3c) Content appended new_merged.txt
1 file changed, 1 insertion(+)

Secvența de mai sus a comenzilor nu numai că verifică ramura principală, ci adaugă conținut în new_merged.txt, dar îl și angajează în final. Acum exemplul nostru are 2 noi angajamente. Unul se află în filiala principală și încă unul în noubranch. Acum, git îmbină newbranch-ul pentru a vedea ce se întâmplă!

$ git merge newbranch
Auto-merging new_merged.txt
CONFLICT (content): Merge conflict in new_merged.txt
Automatic merge failed; fix conflicts and then commit the result.

Git ne arată că a apărut conflictul.

Rezolvarea conflictelor de combinare în GIT

Editarea fișierului în conflict este una dintre modalitățile de a elimina un conflict de îmbinare. Trebuie doar să deschideți fișierul în conflict în editor și să eliminați divizorii de conflict unul câte unul. Odată editat, puteți utiliza git add pentru a adăuga conținutul modificat. Un nou angajament poate fi creat executând:

git commit -m "merged and resolved the conflict in "

Git asigură rezolvarea conflictului și creează astfel o nouă fuziune angajată pentru finalizarea acestuia. Unele dintre comenzile Git care ajută la rezolvarea conflictelor de îmbinare sunt:

git log --merge

Fuziunea –abortul trecut cu comanda git log produce o listă de comitete care intră în conflict între ramurile care fuzionează.

git status

Ajută la identificarea fișierelor aflate în conflict.

git diff

Ajută la găsirea diferențelor între stările unui depozit sau a unui fișier. Este folosit pentru a prezice și a preveni conflictele de îmbinare. Unele instrumente precum cele date mai jos sunt utilizate la pornirea unei fuziuni.

git reset --mixed

Este folosit pentru a anula modificările aduse directorului curent.

git checkout

Se folosește pentru anularea modificărilor în fișiere sau mai frecvent pentru schimbarea ramurilor. Unele instrumente precum cele date mai jos sunt utilizate atunci când apar conflicte în timpul unei fuziuni.

git reset

Este folosit pentru a reseta fișierele în conflict în timpul unui conflict de îmbinare.

git merge --abort

Trecerea - argumentul cu abortul cu git merge permite unuia să părăsească procesul de îmbinare și să revină sucursala la starea inițială.

Avantajele rezolvării conflictelor de combinare a gitului

  • Este utilizat pentru a crea, modifica, șterge sucursale, fișiere sau depozite fără conflicte.
  • Poate fi folosit pentru a îmbina diferite versiuni ale codului.
  • Ajută, de asemenea, să efectueze modificări și să verifice sucursalele la distanță, evitând simultan conflictele.
  • Ajută la gestionarea și gestionarea lansărilor fără conflicte.
  • Menține depozitul și procesul curat și lizibil.

Concluzie

Git are multe utilizări și este utilizat pe scară largă de dezvoltatori, manageri de produse și oameni de știință de date. Comenzile Git sunt foarte eficiente și pot fi foarte utile. Un conflict în git apare atunci când două ramuri diferite încearcă să editeze aceeași linie într-un fișier sau un fișier este șters într-o anumită ramură, dar editat într-o altă. Git gestionează cu succes cele mai multe fuziuni cu caracteristicile sale de fuziune, dar poate fi rezolvat și manual folosind instrumente precum status git, resetare git, git checkout și Git log.

Articole recomandate

Acesta este un ghid pentru Rezolvarea conflictelor de combinare în GIT. Aici vom discuta despre modul de rezolvare eficientă a conflictelor Git Merge cu diverse comenzi, împreună cu avantajele sale. Puteți parcurge și alte articole sugerate pentru a afla mai multe -

  1. Git alternative cu avantaje
  2. Introducere în Git Tools
  3. GitHub vs SVN - Top Differences
  4. Top 11 întrebări pentru interviu GIT
  5. Git Push
  6. Versiuni în tabel
  7. Ghid complet de comandă la distanță Git
  8. Trei etape ale ciclului de viață al gitului cu fluxul de lucru

Categorie: