Published on

Git Flow-dan qanday foydalanish kerak va Git Professional bo'lish

Authors

Git Flow nima va nima uchun kerak

Hozirgacha biz commit, clone, push, pull, branch, merge, rebase, cherry pick, PR, tag, release va versiyalashni o'rgandik. Endi esa muhim savol: qachon commit qilish kerak? Qachon merge qilish kerak? Jamoada production muhitida bu qanday ishlaydi?

Har bir kompaniya o'zining kichik farqlari bilan ishlashi mumkin, ammo umuman olganda ko'pchilik kompaniyalar Git Flow deb ataladigan narsaga amal qiladi. Bu β€” qachon branch yaratish va qachon merge qilish kerakligi haqidagi eng yaxshi amaliyot (best practice) va pattern.

Git Flow β€” jamoada git tarixini tartibli va samarali boshqarish uchun qabul qilingan standart yondashuv.


Git Flow-ning asosiy tuzilmasi

Ikkita asosiy branch

Git Flow-da har doim ikkita asosiy branch mavjud:

main ─────────────────────────────────────►  (faqat release-lar)
  β”‚
develop ──────────────────────────────────►  (barcha joriy ish)
BranchMaqsad
mainFaqat release commit-lari β€” kod foydalanuvchilarga yetganda yangilanadi
developBarcha joriy ishlar β€” asosiy ish shu yerda bajariladi

Feature branch-lari

Yangi funksiya qurish uchun, develop-dan branch yaratiladi:

develop ──┬─────────────────────────────►
           β”‚
           └── feature/some-feature
                  (commit-lar...)
                  merged β†’ develop

Funksiya tayyor bo'lgach, develop-ga merge qilinadi va branch o'chiriladi. Keyingi funksiya uchun β€” yana yangi branch, yana develop-ga merge. Bu jarayon hafta davomida davom etadi.

Release branch-i

Har ikki haftada yoki oyda bir marta, develop-dagi to'plangan funksiyalar foydalanuvchilarga chiqariladi:

develop ──┬──────────────────────────────►
           β”‚
           └── release/1.0.0
                  (final tweaks, bug fix-lar...)
                  merged β†’ main
                  merged β†’ develop

Release branch yaratilgandan keyin:

  • develop-da ish davom etishi mumkin (bu o'zgarishlar keyingi releasega kiradi)
  • Release branch-da faqat final tuzatishlar amalga oshiriladi
  • Tayyor bo'lgach β€” main-ga merge (PR orqali)
  • main-dan ham develop-ga merge (yoki hotfix-lar bilan)

Hotfix branch-i

Production-da kritik xatolik topilganda:

main ──┬────────────────────────────────►
        β”‚
        └── hotfix/fix-crash
               (tuzatish...)
               merged β†’ main   (yangi patch release)
               merged β†’ develop (develop-ni yangilash)

Hotfix develop-dan emas, main-dan branch qilinadi β€” chunki develop-da hali chiqarilmagan o'zgarishlar bor, biz esa faqat production-dagi muammoni hal qilmoqchimiz.


Git Flow qadama-qadam

1. Dastlabki sozlash

main      β†’ dastlabki commit
develop   β†’ main-dan yaratiladi

2. Feature qurish

feature/add-login β†’ develop-dan branch
commit-lar...
PR β†’ develop-ga merge
branch o'chiriladi

3. Navbatdagi feature

feature/home-screen β†’ develop-dan branch
commit-lar...
PR β†’ develop-ga merge
branch o'chiriladi

4. Release tayyorlash

release/1.0.0 β†’ develop-dan branch
version number yangilanadi
final bug fix-lar...
PR β†’ main-ga merge (squash & merge)
Tag qo'shiladi: v1.0.0
GitHub Release yaratiladi
develop-ga ham merge (yoki main β†’ develop)
branch o'chiriladi

5. Hotfix (agar kerak bo'lsa)

hotfix/fix-analytics β†’ main-dan branch
tuzatish commit-i
version: 1.0.1
PR β†’ main-ga merge
Tag: v1.0.1
PR β†’ develop-ga merge (conflict bo'lishi mumkin)
branch o'chiriladi

Amaliy misol: to'liq Git Flow

Boshlash: develop branch yaratish

main β†’ develop branch yaratish β†’ remote-ga push

Endi barcha ish develop-da amalga oshiriladi.

Feature-lar qurish

Feature 1: Login funksiyasi

// LoginView.swift-ga o'zgarishlar
feature/add-login-view branchda:
commit: "Add login view"
commit: "Add login button action"
PR β†’ develop-ga merge (squash & merge tavsiya etiladi)

Feature 2: Profile sahifasi

// ProfileView.swift-ga o'zgarishlar
feature/add-profile-view branchda:
commit-lar...
PR β†’ develop-ga merge

Release tayyorlash

Develop-da yetarlicha funksiyalar to'plangach:

develop β†’ release/1.0.0 branch yaratish

Release branchda:

  1. Version number va build number yangilanadi
  2. Final sinov o'tkaziladi
  3. Kichik bug-lar tuzatiladi
commit: "Release 1.0.0 build 1"

GitHub-da PR yaratish: release/1.0.0 β†’ main

  • PR-ni ko'rib chiqish (review)
  • Squash and merge yoki Merge commit tanlash
  • Merge qilingach branch o'chiriladi

Tag va Release yaratish:

main branchida: Tag β†’ v1.0.0
GitHub β†’ Releases β†’ Draft new release
Tag: v1.0.0
Auto-generate release notes β†’ Publish

develop-ni ham yangilash:

main β†’ develop-ga merge (yoki develop β†’ main-dagi o'zgarishlarni pull)

Hotfix: production xatoligini tuzatish

Aytaylik, v1.0.0 chiqarilgandan so'ng, analytics xatoligi topildi:

main β†’ hotfix/fix-analytics branch
// ProfileView.swift-da analytics tuzatiladi
commit: "Patch: Fix analytics in profile view"
version: 1.0.1, build: 2
commit: "Release 1.0.1 build 2"

PR 1: hotfix/fix-analytics β†’ main

  • Ko'rib chiqiladi, merge qilinadi
  • Tag: v1.0.1
  • GitHub Release: v1.0.1

PR 2: hotfix/fix-analytics β†’ develop

  • Bu yerda conflict bo'lishi mumkin (develop-da boshqa o'zgarishlar ham bor)
  • Conflict-ni hal qilamiz β€” hotfix-dan kelgan kodni saqlaymiz
branch o'chiriladi

Main branch tarixining ko'rinishi

Git Flow-dan foydalanganda, main branchi juda toza ko'rinadi:

main:
  initial commit
  ↓
  merge: release/1.0.0   ← v1.0.0
  ↓
  merge: hotfix/1.0.1    ← v1.0.1
  ↓
  merge: release/1.1.0   ← v1.1.0

Har yuz-yuz commit o'rniga, faqat release-lar ko'rinadi. Bu β€” "sacred timeline" (muqaddas tarix). develop branchida esa barcha kundalik ishlar, commit-lar va feature merge-lari saqlanadi.


GitKraken-da ko'rinish

GitKraken-da Git Flow-ni rangli grafik shaklida ko'rish mumkin:

  • main β€” bir rang
  • develop β€” boshqa rang
  • feature/* β€” uchinchi rang
  • hotfix/* β€” qizil rang

Murakkab loyihalarda, ko'p dasturchi bilan ishlayotganda, bu vizual ko'rinish juda muhim β€” kim qaysi branchda ishlayotgani, branchlar qayerda ajralib, qaerda birlashgani bir qarashda ko'rinadi.


Xulosa: Git Flow qoidalari

Branch turiManbadanMaqsad branchiga
feature/*developdevelop
release/*developmain + develop
hotfix/*mainmain + develop

Asosiy qoidalar:

  • main β€” faqat release commit-lari, doim toza va barqaror
  • develop β€” barcha joriy ish, doim eng so'nggi holat
  • Feature-lar β€” develop-dan, develop-ga qaytadi
  • Release-lar β€” develop-dan, main-ga (va develop-ga) qaytadi
  • Hotfix-lar β€” main-dan, main-ga va develop-ga qaytadi

Qachon Git Flow-ni ishlatish kerak

HolatTavsiya
Yolg'iz, shaxsiy loyihaGit Flow majburiy emas β€” minimum: develop + main
Kichik jamoa (2-5 kishi)Git Flow tavsiya etiladi
Katta jamoa, production appGit Flow zarur

Agar o'zingizning shaxsiy loyihangizda bo'lsangiz, hech bo'lmaganda develop branch yarating va funksiyalarni shu yerda qurib, faqat releaseda main-ga merge qiling β€” bu ham katta qadam.

Git Flow-ni birinchi marta qilish murakkab tuyuladi. Ammo bir necha marta amalda qilib ko'rganingizdan so'ng, bu sizning oddiy ish jarayoningizga aylanadi va butun jamoaning samaradorligini keskin oshiradi.

Buy mea coffee