Mavzu
Fan: Advanced Android dasturlash
Sinf: 10-sinf
Mavzu: Git bilan ishlash amaliyoti (diff, branch, checkout/switch, merge, to'qnashuvlarni hal qilish, reset, stash)
Nazariy konspekt
1. Tarmoqlar (Branches) falsafasi
Tarmoq — bu asosiy loyihadan (main) ajralib chiquvchi parallel ish maydoni.
- Yangi funksiya (
feature-login,feature-payment) yoki xato tuzatish (fix-crash) har doim alohida branch'da yoziladi. - Asosiy
maintarmog'i doimo barqaror va ishchi holatda qoladi. - Tajriba muvaffaqiyatli o'tgach, branch
mainga birlashtiriladi (Merge).
2. Asosiy buyruqlar
| Buyruq | Tavsif |
|---|---|
git branch | Barcha mavjud branchlar ro'yxatini ko'rsatadi |
git switch -c <nom> | Yangi branch yaratadi va unga darhol o'tadi (git checkout -b analogi) |
git switch <nom> | Ko'rsatilgan branchga o'tadi |
git branch -d <nom> | Ishlatib bo'lingan branchni o'chiradi |
git diff | Saqlanmagan o'zgarishlarni satrma-satr solishtiradi |
git merge <branch> | Berilgan branchni joriy branchga birlashtiradi |
git stash | Chala o'zgarishlarni vaqtinchalik yashirib turadi |
git stash pop | Yashirilgan o'zgarishlarni qaytaradi |
git revert <hash> | Xato commitni yangi teskari commit bilan bekor qiladi |
3. Merge Conflict (To'qnashuv) nima va uni qanday yechish kerak?
Agar ikki kishi yoki ikkita branch bitta faylning ayni bir satrini tahrirlagan bo'lsa, Git to'xtaydi va faylga belgi qo'yadi:
text
<<<<<<< HEAD
val API_URL = "https://server1.uz/api"
=======
val API_URL = "https://server2.uz/api"Hal qilish algoritmi:
- Faylni ochib, kerakli to'g'ri satrni qoldiring.
<<<<<<< HEAD,=======,>>>>>>>belgilarini butunlay o'chirib tashlang.- Faylni saqlang,
git add <fayl>vagit commit -m "merge: konflikt hal qilindi"buyruqlarini bering.
Amaliy topshiriqlar
1-topshiriq: Yangi branch yaratish oson
Terminalda git switch -c feature-cart buyrug'i orqali yangi tarmoq oching va git branch orqali faol tarmoq nomini tekshiring.
2-topshiriq: Tarmoqda fayl yaratish oson
feature-cart tarmog'ida CartItem.kt faylini yarating va uni ma'noli commit bilan omborga yozing.
3-topshiriq: Asosiy tarmoqqa qaytish oson
git switch main buyrug'i orqali asosiy tarmoqqa o'ting va ls orqali CartItem.kt fayli ko'rinmayotganiga ishonch hosil qiling.
4-topshiriq: O'zgarishlarni taqqoslash (diff) o'rta
Mavjud faylga yangi satr yozing (commit qilmasdan) va git diff buyrug'i orqali qo'shilgan qator qanday rangda va qaysi belgi bilan chiqqanini tahlil qiling.
5-topshiriq: Muvaffaqiyatli Merge bajarish o'rta
main tarmog'ida turib, git merge feature-cart buyrug'ini ishga tushiring va CartItem.kt endi main ga ham qo'shilganini tasdiqlang.
6-topshiriq: Eski branchni tozalash o'rta
Birlashtirib bo'lingan feature-cart tarmog'ini git branch -d feature-cart buyrug'i orqali o'chirib tashlang.
7-topshiriq: Sun'iy to'qnashuv (Conflict) hosil qilish qiyin
main va feature-theme tarmoqlarida bitta faylning ayni bir satrini turlicha o'zgartiring va ularni birlashtirishga urinib ko'ring.
8-topshiriq: To'qnashuv belgilarini tozalash va commit qiyin
Chiqgan konfliktli faylni oching, <<<<<<< va >>>>>>> belgilarini o'chirib, to'g'ri variantni qoldiring va merge jarayonini muvaffaqiyatli yakunlang.
9-topshiriq: git stash mexanizmini sinash qiyin
Faylga chala kod yozing, git stash qilib yashiring. git status toza ekanini ko'ring, so'ng git stash pop qilib kodingizni qaytarib oling.
10-topshiriq: git revert orqali xato commitni bekor qilish bonus
Oxirgi qilgan testingizdagi xato commit xeshini git log --oneline orqali toping va git revert <hash> orqali yangi bekor qiluvchi commit hosil qiling.
O'zini tekshirish uchun savollar
- Nima uchun barcha yangi funksiyalarni
mainda emas, alohida branch'da qilish tavsiya etiladi? git switch -cvagit switchbuyruqlarining farqi nimada?- Merge Conflict yuz berganda Git qanday belgilarni kod ichiga kiritadi?
git diffbuyrug'ida yashil+va qizil-nimani ifodalaydi?git stashnima maqsadda ishlatiladi vagit stash popnima qiladi?
Uyga vazifa
- Loyihangizda
feature-loginnomli yangi branch oching vaLoginScreen.ktfaylini yaratib commit qiling. mainga qaytib,feature-logintarmog'ini birlashtiring.- Uyda mustaqil tarzda bitta fayl bo'yicha sun'iy merge conflict hosil qiling va uni qo'lda bartaraf etib,
git logdagi birlashtiruvchi commitni ko'ring.
