AXV

Git bilan Ishlash Amaliyoti

Tarmoqlar (Branching), birlashtirish (Merge) va to'qnashuvlarni (Conflict) hal qilish

10-sinfAdvanced Android3-hafta · 8-dars

Bugun nimani o'rganamiz?

Branching falsafasi

Asosiy kodni buzmasdan parallel rivojlanish uchun shoxchalar yaratish

Merge Conflicts

To'qnashuvlar nima sababdan chiqishi va ularni xatosiz tuzatish algoritmi

git stash va revert

Chala o'zgarishlarni vaqtinchalik yashirish va xato commitlarni qaytarish

Muammo: Asosiy kodni buzib qo'yish qo'rquvi

Xavfli yondashuv

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!

Branching mo'jizasi

Asosiy main tarmog'idan nusxa olib, alohida «parallel olam» ochiladi.

Funksiya 100% tayyor bo'lguncha main tinch va barqaror turadi.

Branching qanday ishlaydi? (Parallel Olam)

main tarmog'i Merge commit feature-login tarmog'i Login UI Auth API
01

Tarmoq Ochish va O'tish

git switch -c, git checkout va git diff

Yangi branch ochish: git switch -c

Branch yaratish va o'tish

# 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.

Asosiy tarmoqqa qaytish

# Main tarmog'iga o'tish:
git switch main

Eski Git versiyalarida git checkout -b va git checkout main ishlatilgan.

O'zgarishlarni ko'rish: git diff

Satrma-satr tahlil

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

Branchlarni taqqoslash

Ikki branch o'rtasidagi farqni solishtirish:

git diff main feature-cart

Commit qilishdan avval o'z kodingizni tekshirish uchun ajoyib odat.

Tarmoqlarni birlashtirish: git merge

Birlashtirish qoidalari

1. Avval qabul qiluvchi tarmoqqa o'tiladi: git switch main

2. Qo'shilayotgan branch nomi aytiladi: git merge feature-cart

Fast-forward Merge

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!

02

Merge Conflicts (To'qnashuvlar)

Bir xil satr tahrirlanganda yuzaga keladigan ziddiyatlarni hal qilish

To'qnashuv (Conflict) qachon chiqadi?

Sabab

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...

Qo'rqinchli emas!

Git hech qachon sizning kodingizni o'zboshimchalik bilan o'chirib tashlamaydi.

U jarayonni to'xtatadi va qaror qabul qilishni dasturchining o'ziga topshiradi.

Konfliktli fayl ko'rinishi (Anatomiya)

<<<<<<< HEAD (Joriy tarmoq: main) val serverUrl = "https://api.xorazmiy.uz/v1" ======= (Ajratuvchi chegara) val serverUrl = "https://test.xorazmiy.uz/api" >>>>>>> feature-api (Qo'shilayotgan tarmoq) Dasturchi: kerakli qatorni tanlab, belgilar (<<<, ===, >>>) ni o'chiradi!

To'qnashuvni hal qilishning 4 qadami

1

Faylni ochish

Android Studio yoki muharrirda konflikt bo'lgan faylni oching.

2

Kodni tahrirlash

To'g'ri kodni qoldiring va <<<<<<<, =======, >>>>>>> qatorlarini o'chiring.

3

git add

Hal qilingan faylni sahnaga qo'shing: git add MainActivity.kt

4

git commit

Birlashtirishni yakunlang: git commit -m "merge: to'qnashuv hal qilindi"

Android Studio'da vizual hal qilish

3-Way Merge Tool

Android Studio konflikt chiqqanda "Merge..." oynasini taklif qiladi.

Ekranda 3 ta panel ochiladi: chapda Your Version, o'ngda Their Version, o'rtada esa Result.

Tugmalar orqali hal qilish

Kerakli o'zgarishni >> yoki << strelkalari orqali markazga ko'chirasiz.

"Apply" tugmasini bosganingizda Git avtomatik faylni tayyorlaydi.

03

Kodni Saqlash va Bekor Qilish

git stash, git revert va xavfsiz tarix

Shoshilinch vazifa: git stash

Vaziyat

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.

git stash yechimi

# Chala o'zgarishlarni cho'ntakka yashirish:
git stash

# Main ga o'tib xatoni tuzatish:
git switch main

# Qaytib kelgach kodni qaytarish:
git stash pop

Xatolarni bekor qilish: revert vs reset

git revert (Xavfsiz standart)

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.

git reset (Ehtiyot bo'ling!)

Tarixni orqaga suradi va oxirgi commitlarni o'chiradi.

git reset --hard HEAD~1

Agar bu kod internetga yuklangan bo'lsa, hech qachon --hard qilmang!

Eski branchni tozalash: git branch -d

Xavfsiz o'chirish (-d)

Agar branch asosiy tarmoqqa to'liq merge qilib bo'lingan bo'lsa:

git branch -d feature-cart

Git branchni xatosiz o'chiradi.

Majburiy o'chirish (-D)

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.

To'liq Professional Ish Sikli

1. Branch ochish git switch -c feature-nomi 2. Kod & Commit git diff tekshirish git commit -m 3. Merge & Test git switch main git merge feature 4. Tozalash git branch -d Loyiha barqaror

Git amaliy sirlari (Kartalarni bosing)

Branch xarajati

bosing

Yengil vazn: Gitda branch ochish kompyuter xotirasini deyarli egallamaydi (bor-yo'g'i 41 baytlik ko'rsatkich!).

Konflikt foydasi

bosing

Himoya: To'qnashuv sizning kodingiz boshqa birovning kodi bilan alishib ketmasligini kafolatlaydi.

Stash afzalligi

bosing

Tezkorlik: Ishingizni commit qilishga majbur bo'lmasdan shoshilinch xatolarni tuzatish imkonini beradi.

Bugungi dars buyruqlari spravochnigi

Tarmoqlar bilan ishlash

git switch -c <nom> — yangi branch ochish

git switch <nom> — branchga o'tish

git merge <nom> — birlashtirish

git branch -d <nom> — branchni o'chirish

Tahlil va Saqlash

git diff — o'zgarishlarni solishtirish

git stash — chala kodni saqlash

git stash pop — kodni qaytarish

git revert <hash> — commitni bekor qilish

Tezkor bilim sinovi

Merge Conflict chiqqanda Git fayl ichidagi qaysi belgilar orasiga joriy branch kodini joylaydi?
<div> va </div> orasiga
<<<<<<< HEAD va ======= orasiga
Faqat faylning eng oxiriga
JSON formatida alohida faylga

Sinfdagi laboratoriya amaliyoti

1. Branch va Merge

feature-cart branch oching, Cart.kt faylini yaratib commit qiling va main ga merge qiling.

2. Konfliktni yechish

Ikkita branchda bir satrni o'zgartirib sun'iy to'qnashuv hosil qiling va uni qo'lda bartaraf eting.

Darsning 4 oltin qoidasi

1. Main — muqaddas

Hech qachon chala va sinovdan o'tmagan kodni to'g'ridan-to'g'ri main da yozmang.

2. Yangi ish — yangi branch

Har bir yangi funksiya yoki xato uchun alohida branch oching.

3. Konfliktdan qo'rqmang

Belgilarni diqqat bilan o'qib, to'g'ri variantni qoldiring.

4. git stash ni esda tuting

Shoshilinch ishlarda chala kodni yo'qotmaslik uchun stash eng yaxshi do'stingizdir.

Uyga vazifa va anons

1. Branch & Merge

Loyihangizda feature-profile branchini ochib, muvaffaqiyatli merge qiling.

2. Konfliktni bartaraf etish

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!