Merge konfliktlari — Git bilan ishlashda eng ko’p qo’rqiladigan, ammo aslida oddiy hal qilinadigan holat. Konflikt ikki tarmoq bir xil faylning bir xil qatorini har xil o’zgartirganda yuzaga keladi. Git qaysi versiyani tanlashni bilmaydi va sizdan qaror kutadi. Buni hal qilishni bilish — muhim ko’nikma.
Merge konflikti — ikki tarmoq bir xil kod qatorini har xil o’zgartirganda
git mergeyuzaga keltiradigan holat. Git avtomatik birlashtira olmaydi va qo’lda hal qilishni so’raydi.
Konflikt qanday yuzaga keladi?
Ikki tarmoq bir faylning bir qatorini o’zgartirsa, birlashtirishda konflikt chiqadi:
git merge yangi-funksiya
Auto-merging salom.txt
CONFLICT (content): Merge conflict in salom.txt
Automatic merge failed; fix conflicts and then commit the result.
Git “CONFLICT” deb ogohlantirdi — u salom.txt da ikki xil o’zgarishni avtomatik birlashtira olmadi. Endi qaror sizniki.
Konflikt belgilarini tushunish
Git konfliktli faylga maxsus belgilar qo’yadi. Faylni ochsangiz, quyidagini ko’rasiz:
cat salom.txt
<<<<<<< HEAD
Salom, Master Sherkulov!
=======
Salom, UzbekDevs jamoasi!
>>>>>>> yangi-funksiya
Belgilarning ma’nosi: <<<<<<< HEAD va ======= orasi — joriy tarmoq (main) versiyasi; ======= va >>>>>>> orasi — birlashtirilayotgan tarmoq versiyasi. Siz qaysi birini qoldirishni (yoki ikkovini birlashtirishni) hal qilasiz.
Konfliktni hal qilish
Konfliktni hal qilish uchun faylni tahrirlab, belgilarni o’chirib, to’g’ri variantni qoldirasiz:
# Faylni tahrirlab, kerakli matnni qoldiramiz:
# Salom, UzbekDevs jamoasi!
git add salom.txt
git commit -m "Merge konflikti hal qilindi"
[main f6a7b8c] Merge konflikti hal qilindi
Faylni tahrirlab (konflikt belgilarini olib tashlab), git add bilan “hal qilindi” deb belgiladik, so’ng git commit bilan birlashtirishni yakunladik. Konflikt hal bo’ldi.
Hal qilish bosqichlari
Konfliktni hal qilish tartibini jadvalda jamlaymiz:
| Bosqich | Amal |
|---|---|
| 1 | git merge konflikt beradi |
| 2 | Konfliktli faylni ochib, belgilarni topamiz |
| 3 | Kerakli matnni qoldirib, belgilarni o’chiramiz |
| 4 | git add bilan hal qilinganini belgilaymiz |
| 5 | git commit bilan yakunlaymiz |
Qo’rqmaslik kerak
Konflikt — xato emas, balki oddiy ish holati. Jamoada bir necha kishi bir faylni o’zgartirsa, konflikt tabiiy. git merge --abort bilan birlashtirishni butunlay bekor qilib, boshidan boshlash ham mumkin. Konfliktni hal qilishni bilsangiz, jamoa ishida hech qanday qiyinchilik bo’lmaydi.
Xulosa
Bu bo’limda merge konflikti nima ekanini, konflikt belgilarini (<<<, ===, >>>), uni hal qilish bosqichlarini va --abort ni ko’rib chiqdik. Konfliktni hal qilish — jamoa ishining muhim ko’nikmasidir. Keyingi darsda git rebase ga o’tamiz.