9. Git: merge konflikt (15 min)
Výstup bloku: účastníci se konfliktu nebojí a umí ho vyřešit.
Co je konflikt (2 min)
Dva lidé změní stejné místo ve stejném souboru. Git neví, kterou verzi chce člověk zachovat, a rozhodnutí nechá na něm. Konflikt není chyba, je to běžná součást týmové práce.
Připravený příklad (3 min)
Lektor předem vloží do repozitáře soubor pravidla.md:
# Pravidla týmu
Denní synchronizace začíná v 9:00.
Všichni udělají git pull.
Vyvolání konfliktu (4 min)
Pracovat po dvojicích (A a B).
- A i B změní stejný řádek v
pravidla.md:- A:
Denní synchronizace začíná v 9:00 online. - B:
Denní synchronizace začíná v 8:30 osobně.
- A:
- A commitne a pushne (projde).
- B commitne a pushne (odmítnuto) a provede
git pull.
git add pravidla.md
git commit -m "Změní čas synchronizace"
git push # odmítnuto
git pull # CONFLICT (content): Merge conflict in pravidla.md
Řešení (6 min)
Soubor teď obsahuje značky:
<<<<<<< HEAD
Denní synchronizace začíná v 8:30 osobně.
=======
Denní synchronizace začíná v 9:00 online.
>>>>>>> origin/main
- horní část = moje verze, spodní část = verze ze vzdáleného repozitáře.
Postup:
- Domluvit se s kolegou, jak to má být (konflikt je rozhovor, ne souboj).
- Upravit soubor ručně na výsledné znění a smazat značky
<<<<<<<,=======,>>>>>>>. - Dokončit:
git add pravidla.md
git commit -m "Vyřeší konflikt: synchronizace v 9:00 online"
git push
Editory (VS Code) nabízejí u konfliktu tlačítka „Accept Current / Incoming / Both“. Použít, ale vždy zkontrolovat výsledek.
Jak konfliktům předcházet
- pracovat na malých změnách a často je integrovat,
- před prací
git pull, - domluvit se, kdo mění které soubory,
- každý pracuje na vlastní větvi (další blok).
Poznámky pro lektora
- Pokud je lichý počet účastníků, tvoří trojice, třetí vyřeší druhý konflikt nad další změnou.
- Pokud někdo omylem uvízne v nedokončeném mergi:
git merge --abortvrátí stav předgit pull.