Tarmoqlar (Branching), birlashtirish (Merge) va to'qnashuvlarni (Conflict) hal qilish
10-sinfAdvanced Android3-hafta · 8-darsAsosiy kodni buzmasdan parallel rivojlanish uchun shoxchalar yaratish
To'qnashuvlar nima sababdan chiqishi va ularni xatosiz tuzatish algoritmi
Chala o'zgarishlarni vaqtinchalik yashirish va xato commitlarni qaytarish
Do'konda to'lov moduli ishlab turibdi. Dasturchi to'g'ridan-to'g'ri main da yangi funksiya yozyapti.
Lekin kod hali chala, ilova kompilyatsiya bo'lmayapti. Boshqa dasturchilarning ham ishi to'xtadi!
Asosiy main tarmog'idan nusxa olib, alohida «parallel olam» ochiladi.
Funksiya 100% tayyor bo'lguncha main tinch va barqaror turadi.
git switch -c, git checkout va git diff
# Yangi branch ochib unga o'tish:
git switch -c feature-cart
# Mavjud branchlar ro'yxatini ko'rish:
git branch
Yashil rang va yulduzcha (*) joriy faol branchni bildiradi.
# Main tarmog'iga o'tish:
git switch main
Eski Git versiyalarida git checkout -b va git checkout main ishlatilgan.
Faylda qaysi satrlar yangi yozildi yoki o'chirildi?
git diff
Terminalda:
+ yashil rang: Yangi qo'shilgan satrlar
- qizil rang: O'chirilgan yoki o'zgargan satrlar
Ikki branch o'rtasidagi farqni solishtirish:
git diff main feature-cart
Commit qilishdan avval o'z kodingizni tekshirish uchun ajoyib odat.
1. Avval qabul qiluvchi tarmoqqa o'tiladi: git switch main
2. Qo'shilayotgan branch nomi aytiladi: git merge feature-cart
Agar main tarmog'ida siz ajralib chiqqaningizdan beri hech qanday yangi commit qilinmagan bo'lsa, Git shunchaki ko'rsatkichni oldinga suradi.
Hech qanday to'qnashuvsiz bir zumda birlashadi!
Bir xil satr tahrirlanganda yuzaga keladigan ziddiyatlarni hal qilish
Ikkita turli tarmoqda ayni bir faylning bir xil satri ikki xil o'zgartirilsa, Git qaysi biri haqiqat ekanini bilmay qoladi.
CONFLICT (content): Merge conflict in MainActivity.kt
Automatic merge failed; fix conflicts...
Git hech qachon sizning kodingizni o'zboshimchalik bilan o'chirib tashlamaydi.
U jarayonni to'xtatadi va qaror qabul qilishni dasturchining o'ziga topshiradi.
Android Studio yoki muharrirda konflikt bo'lgan faylni oching.
To'g'ri kodni qoldiring va <<<<<<<, =======, >>>>>>> qatorlarini o'chiring.
Hal qilingan faylni sahnaga qo'shing: git add MainActivity.kt
Birlashtirishni yakunlang: git commit -m "merge: to'qnashuv hal qilindi"
Android Studio konflikt chiqqanda "Merge..." oynasini taklif qiladi.
Ekranda 3 ta panel ochiladi: chapda Your Version, o'ngda Their Version, o'rtada esa Result.
Kerakli o'zgarishni >> yoki << strelkalari orqali markazga ko'chirasiz.
"Apply" tugmasini bosganingizda Git avtomatik faylni tayyorlaydi.
git stash, git revert va xavfsiz tarix
Siz yangi funksiya yozyapsiz (kod chala, commit qilib bo'lmaydi).
To'satdan mijoz qo'ng'iroq qildi: "Main da jiddiy xato bor, darhol tuzating!".
Branch almashtirish uchun ishchi maydon toza bo'lishi kerak.
# Chala o'zgarishlarni cho'ntakka yashirish:
git stash
# Main ga o'tib xatoni tuzatish:
git switch main
# Qaytib kelgach kodni qaytarish:
git stash pop
Eski commitni o'chirib tashlamaydi, aksincha unga qarama-qarshi yangi commit yaratadi.
git revert a1b2c3d
Loyiha tarixi buzilmaydi, jamoada ishlash uchun eng to'g'ri yo'l.
Tarixni orqaga suradi va oxirgi commitlarni o'chiradi.
git reset --hard HEAD~1
Agar bu kod internetga yuklangan bo'lsa, hech qachon --hard qilmang!
Agar branch asosiy tarmoqqa to'liq merge qilib bo'lingan bo'lsa:
git branch -d feature-cart
Git branchni xatosiz o'chiradi.
Agar tajriba omadsiz bo'lsa va merge qilinmagan branchni butunlay yo'qotmoqchi bo'lsangiz:
git branch -D feature-failed
Katta harfdagi -D majburiy o'chirishni bildiradi.
Yengil vazn: Gitda branch ochish kompyuter xotirasini deyarli egallamaydi (bor-yo'g'i 41 baytlik ko'rsatkich!).
Himoya: To'qnashuv sizning kodingiz boshqa birovning kodi bilan alishib ketmasligini kafolatlaydi.
Tezkorlik: Ishingizni commit qilishga majbur bo'lmasdan shoshilinch xatolarni tuzatish imkonini beradi.
git switch -c <nom> — yangi branch ochish
git switch <nom> — branchga o'tish
git merge <nom> — birlashtirish
git branch -d <nom> — branchni o'chirish
git diff — o'zgarishlarni solishtirish
git stash — chala kodni saqlash
git stash pop — kodni qaytarish
git revert <hash> — commitni bekor qilish
feature-cart branch oching, Cart.kt faylini yaratib commit qiling va main ga merge qiling.
Ikkita branchda bir satrni o'zgartirib sun'iy to'qnashuv hosil qiling va uni qo'lda bartaraf eting.
Hech qachon chala va sinovdan o'tmagan kodni to'g'ridan-to'g'ri main da yozmang.
Har bir yangi funksiya yoki xato uchun alohida branch oching.
Belgilarni diqqat bilan o'qib, to'g'ri variantni qoldiring.
Shoshilinch ishlarda chala kodni yo'qotmaslik uchun stash eng yaxshi do'stingizdir.
Loyihangizda feature-profile branchini ochib, muvaffaqiyatli merge qiling.
Sun'iy to'qnashuv hosil qilib, uni qo'lda tuzating va merge commitini amalga oshiring.
Keyingi dars: GitHub platformasida loyihalar yaratish, remote repozitoriy va jamoaviy ishlash!