Merge conflict

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.