Skip to content
3-hafta · 8-dars

8-dars: Git bilan ishlash amaliyoti (Tarmoqlar va Konfliktlar)

>>>>>> feature-api

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 main tarmog'i doimo barqaror va ishchi holatda qoladi.
  • Tajriba muvaffaqiyatli o'tgach, branch main ga birlashtiriladi (Merge).

2. Asosiy buyruqlar ​

BuyruqTavsif
git branchBarcha 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 diffSaqlanmagan o'zgarishlarni satrma-satr solishtiradi
git merge <branch>Berilgan branchni joriy branchga birlashtiradi
git stashChala o'zgarishlarni vaqtinchalik yashirib turadi
git stash popYashirilgan 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:

  1. Faylni ochib, kerakli to'g'ri satrni qoldiring.
  2. <<<<<<< HEAD, =======, >>>>>>> belgilarini butunlay o'chirib tashlang.
  3. Faylni saqlang, git add <fayl> va git 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 ​

  1. Nima uchun barcha yangi funksiyalarni main da emas, alohida branch'da qilish tavsiya etiladi?
  2. git switch -c va git switch buyruqlarining farqi nimada?
  3. Merge Conflict yuz berganda Git qanday belgilarni kod ichiga kiritadi?
  4. git diff buyrug'ida yashil + va qizil - nimani ifodalaydi?
  5. git stash nima maqsadda ishlatiladi va git stash pop nima qiladi?

Uyga vazifa ​

  1. Loyihangizda feature-login nomli yangi branch oching va LoginScreen.kt faylini yaratib commit qiling.
  2. main ga qaytib, feature-login tarmog'ini birlashtiring.
  3. Uyda mustaqil tarzda bitta fayl bo'yicha sun'iy merge conflict hosil qiling va uni qo'lda bartaraf etib, git log dagi birlashtiruvchi commitni ko'ring.