Darsliklar GIT Merge konfliktlari

GIT GIT Merge konfliktlari

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 konfliktiikki tarmoq bir xil kod qatorini har xil o’zgartirganda git merge yuzaga 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.