Merge conflict

Kui merge request sisaldab muudatusi, mis on vastuolus peamise koodibaasiga, võib tekkida konflikte. Sellisel juhul peab arendaja need konfliktid lahendama enne merge requesti-i ühendamist.

Konfliktid võivad tekkida siis, kui teised arendajad on samal ajal teinud muudatusi , mis mõjutavad samu faile.

Video

Suurema konflikti lahendamine

Vahel juhtub nii, et merge conflict on väga suur ning konflikte ei õnnestu GitLabis otse lahendada. Sellisel juhul on üks võimalus toimida järgnevalt:

  1. Ava Pycharm

  2. Mine merge request-i harusse

  3. Merge’i main haru merge request-i harusse

  4. Pycharm avab akna, kus saad valida millist koodi tahad alles jätta ja millist asendada

  5. Vali muudatused, mis peaksid alles jääma ning commit + push need

  6. Vii merge request lõpuni

Video PyCharmilt

Praktilised ülesanded merge conflictide tekitamise ja lahendamise kohta

Eesmärk: Õpi, kuidas lahendada merge konflikte, mis tekivad, kui erinevates harudes on tehtud vastuolulisi muudatusi, kasutades PyCharmi graafilist liidest.

Projekt, millega ülesandeid lahendada: https://gitlab.cs.ttu.ee/iti0105-2024/git-workshop

Juhised projekti kloonimiseks/forkimiseks leiad siit.

1. Juhised IDE jaoks:

Konflikti tekitamine:

  • Loo uus haru nimega conflict-branch, mille kohta on juhend siin: Add-commit-push workflow
    • Kasuta eelnevalt õpitud teadmisi ning loo uus branch nimega conflict-branch.

    • Veendu, et peale uue branchi loomist, jätkad töö tegemist loodud branchis.

  • Tee muudatus failis myfile.txt:
    • Avage fail myfile.txt ja tee sinna mõni muudatus (näiteks lisa uus rida tekstiga).

    • Salvesta fail (Ctrl + S).

  • Commit'i muudatused conflict-branch harule:
    • Paremklõpsake failil ja valige Git > Commit....

    • Sisesta commit'i sõnum (näiteks "Muudatus conflict-branch'is").

    • Vajutage Commit.

Tagasi põhiharule (main) vahetamine ja muudatuste tegemine:

  • Liikuge tagasi main harule.

  • Avage fail myfile.txt ja tehke selles teine muudatus, mis on vastuolus conflict-branch haru muudatustega (näiteks muutke sama rida, mida muutsid conflict-branch harus).

  • Salvesta fail ja commit'i muudatus main harus.

Harude ühendamine ja konflikti tekkimine:

  • Kasuta eelnevalt õpitud teadmisi ning proovi conflict-branch merge'ida põhiharuga main.

  • PyCharm tuvastab konflikti ja kuvab teate, et konflikt on tekkinud.

Konflikti lahendamine PyCharmi abil:

  • PyCharm kuvab konflikti lahendamiseks dialoogiakna.

  • Klõpsake failil, millel on konflikt (näiteks myfile.txt), ja valige Merge.

  • Avaneb kolme aknaga vaade:
    • Vasak aken: Teie muudatused main harus.

    • Parem aken: Muudatused conflict-branch harus.

    • Alumine aken: Lõplik lahendus, mida soovite salvestada.

  • Valige, millised muudatused soovite säilitada või ühendage need käsitsi, redigeerides alumist akent.

  • Kui olete konfliktid lahendanud, klõpsake Apply ja seejärel Commit Merge nuppu.

Lahendatud muudatuste commit'imine ja push'imine:

  • Pärast konflikti lahendamist salvestab PyCharm muudatused automaatselt.

  • Commit'i lahendatud konflikt:
    • Kui lahendamise käigus ei olnud automaatset commit'i, valige ülemisest menüüst Git > Commit....

    • Sisestage sobiv commit'i sõnum, näiteks "Lahendatud merge konflikt".

    • Vajutage Commit.

  • Push'i lahendatud commit GitLab'i:
    • Vali ülemisest menüüst Git > Push....

    • Kontrollige, et kõik commit'id on valitud, ja vajutage Push nuppu.

Kinnita GitLab'is:

  • Avage oma GitLab'i repositoorium veebibrauseris ja veenduge, et konflikt on lahendatud ja kõik muudatused on edukalt üles laetud.

2. Juhised terminali jaoks:

Konflikti tekitamine:

  • Loo uus haru nimega conflict-branch ja vaheta sellele:

git checkout -b conflict-branch

Tee muudatus failis myfile.txt:

nano myfile.txt
  • Commit'i muudatused conflict-branch harule:

git add myfile.txt
git commit -m "Muudatus conflict-branch'is"

Tagasi põhiharule (main) vahetamine ja muudatuste tegemine:

  • Vaheta tagasi main harule:

git checkout main
  • Tee vastuoluline muudatus failis myfile.txt:

nano myfile.txt
  • Muuda sama kohta failis, mida muutsid conflict-branch harus. Salvesta ja välju.

  • Commit'i muudatused main harus:

git add myfile.txt
git commit -m "Vastuoluline muudatus main harus"

Harude ühendamine ja konflikti tekkimine:

  • Proovi merge'ida conflict-branch main harus:

  • Git tuvastab konflikti ja kuvab teate.

Konflikti lahendamine terminalis:

  • Ava konfliktne fail:

nano myfile.txt
  • Failis näed konfliktimärkmeid:

<<<<<<< HEAD
Teie muudatused `main` harus
=======
Muudatused `conflict-branch` harus
>>>>>>> conflict-branch
  • Lahenda konflikt, valides sobivad muudatused või ühendades need. Eemalda konfliktimärgendid (<<<<<<<, =======, >>>>>>>).

  • Salvesta fail ja välju.

Lahendatud muudatuste commit'imine ja push'imine:

  • Lisa lahendatud fail ja commiti muudatused:

git add myfile.txt
git commit -m "Lahendatud merge konflikt"
  • Push'i uuendatud main haru:

git push origin main

Kinnita GitLab'is:

  • Ava oma GitLab'i repositoorium veebibrauseris ja veendu, et konflikt on lahendatud ning kõik muudatused on edukalt üles laetud.