GitHub Flow — soddaroq workflow, qachon mos keladi
Muammodan boshlaylik
Kichik jamoa, veb-ilova. Gitflow ni joriy qildingiz (32-dars). Bir oydan keyin:
- Kichik tuzatish production ga yetishi uchun: feature → develop → release → main — 4 bosqich, 3 kun
developvamaindoimiy ravishda bir-biridan uzoqlashadi- Hotfix ni
developga qo'shish yana unutildi - Hamma "qaysi branch dan boshlash kerak edi?" deb so'raydi
Veb-ilova uchun bu — ortiqcha. Saytni kuniga 10 marta yangilash mumkin, App Store ko'rib chiqishi yo'q. Kerak — soddaroq model. GitHub Flow.
GitHub Flow — bitta qoida
maindagi har bir narsa — deploy qilishga tayyor.
Bitta doimiy branch — main. Qolgan hamma narsa — undan chiqib, unga qaytadigan qisqa branch lar.
main ●─────●─────────●─────●───────────●─────●──→ (har bir merge = deploy)
\ ↗ \ ↗ \ ↗
●─● ●─● ●─●
feature/savat fix/narx feature/qidiruv
6 qadam
1. Branch yaratish — main dan
git switch main
git pull
git switch -c feature/mahsulot-qidiruvi
Nom — tavsifiy: nima qilinayotgani nomdan tushunarli bo'lsin.
2. Commitlar
Kichik, mantiqiy commitlar (8-dars). Tez-tez push qiling — zaxira va CI testlari uchun:
git push -u origin feature/mahsulot-qidiruvi
3. Pull Request ochish
Erta — hatto ish tugamagan bo'lsa ham (Draft PR, 23-dars). PR — muhokama joyi: "Shu yondashuv to'g'rimi?" degan savolni kod tayyor bo'lishidan oldin berish.
4. Review va muhokama
Jamoa ko'rib chiqadi, izoh qoldiradi; siz yangi commitlar push qilasiz. CI testlari har push da avtomatik ishlaydi (38-dars).
5. Deploy va tekshirish
Ko'p jamoalar merge dan oldin branch ni staging (yoki preview) muhitiga deploy qiladi. Vercel, Netlify kabi platformalar har bir PR uchun avtomatik preview URL yaratadi:
✅ Preview: https://dokon-git-feature-mahsulot-qidiruvi.vercel.app
Reviewerlar o'zgarishni brauzerda ko'radi.
6. Merge → avtomatik production
PR tasdiqlandi, testlar yashil → Merge → CI/CD main ni production ga deploy qiladi (39-dars). Branch o'chiriladi.
git switch main
git pull
git branch -d feature/mahsulot-qidiruvi
Hotfix — alohida jarayon yo'q
GitHub Flow da hotfix — shunchaki kichik branch:
git switch main && git pull
git switch -c fix/tolov-yaxlitlash
# tuzatish, push, PR, tez review, merge → deploy
main doim production holatida bo'lgani uchun develop ga qo'shish, teg qo'yish kabi qo'shimcha qadamlar yo'q. Muammo jiddiy bo'lsa — avval git revert (28-dars), keyin xotirjam tuzatish.
Muvaffaqiyat shartlari
GitHub Flow sodda — lekin bu soddalik bir qancha shartlarga tayanadi:
| Shart | Nima uchun |
|---|---|
| Avtomatik testlar (CI) | main ga tushgan narsa darhol production ga ketadi — inson tekshiruvi yetmaydi |
| Avtomatik deploy (CD) | Merge → deploy, qo'lda qadamlarsiz |
| Branch protection | main ga to'g'ridan-to'g'ri push yo'q, PR + review + yashil testlar (23-dars) |
| Kichik PR lar | Bir necha kunlik branch lar; katta PR — katta xavf |
| Tez rollback | Revert yoki oldingi versiyani bir tugmada deploy qilish |
Bular bo'lmasa — "main doim deploy ga tayyor" va'dasi bajarilmaydi.
Tayyor bo'lmagan funksiyalar — feature flags
Katta funksiya (masalan, yangi to'lov tizimi) 3 haftada tayyor bo'ladi. 3 haftalik branch — katta conflict lar. GitHub Flow javobi: kodni kichik qismlarda main ga qo'shish, lekin foydalanuvchidan yashirish:
if (featureFlags.yangiTolov && foydalanuvchi.betaTester) {
return <YangiTolovFormasi />;
}
return <EskiTolovFormasi />;
Kod production da, lekin o'chirilgan. Tayyor bo'lganda — flag yoqiladi (avval 5% foydalanuvchiga, keyin hammaga). Muammo bo'lsa — flag o'chiriladi, deploy kerak emas.
Boshqa variantlar
Trunk-Based Development
GitHub Flow ning yanada qisqartirilgan shakli: branch lar bir kundan kam yashaydi, yoki dasturchilar to'g'ridan-to'g'ri main ("trunk") ga kichik commitlar qiladi. Kuchli testlar va feature flag lar talab qilinadi. Google, Meta kabi katta kompaniyalar shunday ishlaydi.
GitLab Flow
GitHub Flow + muhit branch lari: main → staging → production. Har bir muhitga merge orqali "ko'tariladi". Deploy vaqtini nazorat qilish kerak bo'lganda (masalan, faqat ish vaqtida).
Qaysi workflow ni tanlash
| Loyiha | Tavsiya |
|---|---|
| Veb-ilova, SaaS, uzluksiz deploy | GitHub Flow |
| Shaxsiy loyiha, portfolio | GitHub Flow (yoki shunchaki main + branch lar) |
| Mobil ilova (do'kon ko'rib chiqishi bilan) | Gitflow yoki release branch lar bilan GitHub Flow |
| Kutubxona, bir nechta versiya qo'llab-quvvatlanadi | Gitflow yoki main + release/X.x branch lar |
| Katta tajribali jamoa, kuchli CI | Trunk-Based |
Workflow — dogma emas. Eng yaxshisi — jamoangiz tushunadigan va rioya qiladigan soddaroq model. Uni CONTRIBUTING.md da yozib qo'ying.
Nima uchun shunday?
Nima uchun oddiyroq workflow ko'pincha yaxshiroq ishlaydi — Gitflow ko'proq nazorat bermaydimi?
Chunki xavf — o'zgarish hajmiga bog'liq, jarayon murakkabligiga emas. Gitflow da o'zgarishlar develop da haftalab to'planadi va relizda katta to'plam bo'lib production ga chiqadi — biror narsa buzilsa, 50 ta o'zgarishdan qaysi biri sabab ekanini topish qiyin. GitHub Flow da har bir kichik o'zgarish alohida, darhol chiqadi: muammo bo'lsa, sabab — oxirgi kichik PR, va uni bitta revert bilan bekor qilish mumkin. Kichik va tez-tez — katta va kam-kamdan xavfsizroq. Lekin buning sharti — testlar va avtomatlashtirish: ular Gitflow dagi qo'lda bosqichlar bajargan nazoratni o'z zimmasiga oladi.
Xulosa
Eslab qoling:
- GitHub Flow: bitta doimiy branch —
maindoim deploy ga tayyor - 6 qadam: branch (main dan) → commitlar → PR → review + CI → (preview) deploy → merge
- Hotfix — oddiy qisqa branch; jiddiy muammo — avval revert
- Shartlar: avtomatik testlar, avtomatik deploy, branch protection, kichik PR lar
- Tayyor bo'lmagan funksiyalar — feature flags
- Trunk-Based — juda qisqa branch lar; GitLab Flow — muhit branch lari
- Veb uchun — GitHub Flow; rejalashtirilgan relizlar uchun — Gitflow
Keyingi dars
34-dars: Conventional Commits — commit xabarlarini standartlashtirish