Birlashtirish (merge) — bu nima, merge qanday ishlaydi va birlashtirish strategiyalari

Muallif: IT Sectr Nashr etilgan: 2026-08-01 O'qish vaqti: 9 daq

Merge — bu Git-da shoxlarni birlashtirish operatsiyasi bo‘lib, ikki turli rivojlanish chizig‘idagi o‘zgarishlarni bitta maqsadli shoxda birlashtiradi. Rebase-dan farqli o‘laroq, merge ikki ota-onaga ega maxsus merge-commit yaratib, to‘liq shoxlanish tarixini saqlaydi. Git rasmiy hujjatlariga (2026) ko‘ra, merge shoxlarni birlashtirishning eng xavfsiz usulidir, chunki u tarixni qayta yozmaydi va qachon, qaysi shoxlar birlashtirilganini kuzatishga imkon beradi. Bu main, develop va release kabi ommaviy shoxlarda birlashtirish uchun standart tanlovdir.

Asosiy ma’lumotlar

  • Merge — ikki shox tarixini saqlaydigan merge-commit yaratish bilan shoxlarni birlashtirish.
  • Merge-commit — ikki ota-onaga ega maxsus commit, birlashtirish faktini qayd etadi.
  • Birlashtirish strategiyalari — recursive, octopus, ours, squash — har biri turli stsenariylar uchun mos.
  • Mojarolar — bir xil qatorlar ikkala shoxda bir vaqtda o‘zgartirilganda yuzaga keladi va qo‘lda hal qilishni talab qiladi.
  • Xavfsizlik — merge mavjud commitlarni o‘zgartirmaydi, shuning uchun ommaviy shoxlar uchun xavfsizdir.

Git-da merge nima

Merge — bu ko‘rsatilgan shoxdagi o‘zgarishlarni joriy shoxda birlashtiruvchi git merge buyrug‘idir. Git umumiy ajdodni (umumiy bazaviy commitni) topadi, har bir shoxning ajdodga nisbatan diffini hisoblaydi va birlashtirilgan o‘zgarishlar to‘plamini o‘z ichiga olgan merge-commit yaratadi. Natija — maqsadli shox birlashtirilgan shoxdagi barcha o‘zgarishlar bilan to‘ldiriladi.

Sintaksis: maqsadli shoxda (masalan, main) bo‘lib, git merge feature ni bajaring. Agar mojarolar bo‘lmasa, Git avtomatik ravishda merge-commit yaratadi. Merge-commitning standart xabarida ko‘rsatiladi: “Merge branch ‘feature’ into main”. Xabarni -m bayrog‘i orqali o‘zgartirish yoki ochilgan muharrirda tahrir qilish mumkin.

Merge buzilmaydigan operatsiyadir. Rebase-dan farqli o‘laroq, merge mavjud commitlarga tegmadi: ular bir xil xeshlar, mualliflar va sanalar bilan qoladi. Bu merge-ni bir vaqtning o‘zida bir nechta dasturchilar ishlaydigan shoxlar uchun yagona xavfsiz birlashtirish usuliga aylantiradi. Agar biror narsa noto‘g‘ri ketsa, merge-ni git merge --abort buyrug‘i bilan bekor qilish mumkin.

bash
# Maqsadli shoxga o‘t
git checkout main

# Funksiya shoxini birlashtir
git merge feature

# Natija — ikki ota-onaga ega merge-commit
git log --oneline --graph

# Maxsus xabar bilan birlashtir
git merge feature -m "feat: integrate authentication module"

Merge turlari: regular, squash, fast-forward

Git uchta birlashtirish rejimini qo‘llab-quvvatlaydi, ular istalgan natijaga qarab tanlanadi. Regular merge (standart) merge-commit yaratadi. Squash merge funksiya shoxidagi barcha commitlarni bittaga birlashtiradi. Fast-forward — iloji bo‘lsa, commit yaratmasdan shox ko‘rsatkichini oldinga siljitadi. Rejimni tanlash jamoa workflow-i va tarix qoidalariga bog‘liq.

Regular merge (--no-ff) — birlashtirish fast-forward sifatida bajarilishi mumkin bo‘lsa ham merge-commit yaratadi. Main shoxi uchun tavsiya etiladi: merge-commit funksiya integratsiyasi momentini aniq belgilaydi va bitta revert merge-commit orqali funksiya shoxidagi barcha o‘zgarishlarni osonlikcha qaytarishga imkon beradi. GitHub Merge tugmasi orqali PRlarni birlashtirganda standart ravishda ushbu rejimdan foydalanadi.

Squash merge (--squash) — funksiya shoxidagi barcha commitlarni maqsadli shoxda bitta commitga yig‘adi. Funksiya shoxining qoralama tarixi main-ga tushmasligi kerak bo‘lganda foydali. Kamchilik: asl commitlar bilan aloqa yo‘qoladi — funksiya qanday qadamlar bilan ishlab chiqilganini ko‘rib bo‘lmaydi. GitHub PR-da “Squash and merge” ni tanlaganda ushbu rejimdan foydalanadi.

Fast-forward (--ff) — agar maqsadli shoxda funksiya ajratilgandan keyin yangi commitlar bo‘lmasa, Git shunchaki ko‘rsatkichni oldinga siljitadi, merge-commit yaratmasdan. Tarix chiziqli bo‘lib qoladi. --no-ff bayrog‘i majburiy merge-commit yaratadi, --ff-only esa fast-forward imkoni bo‘lmasa xato bilan tugaydi.

bash
# Majburiy merge-commit (main uchun tavsiya etiladi)
git merge --no-ff feature

# Squash merge — barcha commitlar bittaga
git merge --squash feature
git commit -m "feat: add authentication"

# Fast-forward faqat iloji bo‘lsa
git merge --ff-only feature

# Mojaroli merge-ni bekor qil
git merge --abort

Git birlashtirish strategiyalari

Birlashtirish strategiyalari Git o‘zgarishlarni birlashtirish uchun foydalanadigan algoritmni belgilaydi. Har bir strategiya turli stsenariylar uchun mos keladi. Git avtomatik ravishda mos strategiyani tanlaydi, ammo dasturchi uni --strategy bayrog‘i orqali aniq ko‘rsatishi mumkin. Strategiyalarni tushunish murakkab birlashtirishlarda Git xatti-harakatini bashorat qilishga yordam beradi.

Recursive — ikki shoxni birlashtirish uchun standart strategiya. Git umumiy ajdodni topadi, har bir shoxdagi o‘zgarishlarni hisoblaydi va ularni birlashtiradi. Agar umumiy ajdod topilsa, recursive fayllarni qayta nomlash va yangilarini qo‘shishni to‘g‘ri boshqaradi. Mojarolarda recursive qo‘shimcha variantlardan foydalanishi mumkin: ours (avtomatik ravishda bizning versiyani tanlash) va theirs (ularning versiyasini tanlash).

Octopus — birdan ortiq ikki shoxni bir vaqtning o‘zida birlashtirish uchun: git merge feature1 feature2 feature3. Octopus mojarolarni hal qilishni qo‘llab-quvvatlamaydi — barcha mojarolar buyruq chaqirilishidan oldin hal qilinishi kerak. Kamdan-kam ishlatiladi, asosan to‘qnashmasligiga kafolat berilgan bir nechta mustaqil shoxlarni birlashtirish uchun (masalan, turli modullar).

StrategiyaShoxlar soniMojarolarni hal qilish
Recursive2Avtomatik + ours/theirs variantlari
Octopus3+Yo‘q — barcha mojarolar oldindan hal qilinishi kerak
OursIstalganHar doim bizning versiyani tanlaydi, begona o‘zgarishlar e’tiborga olinmaydi
Subtree2Pastki daraxtlarni birlashtirish uchun (subtree merge)

Ours — birlashtirilayotgan shoxdagi o‘zgarishlarni butunlay e’tiborsiz qoldiradigan va maqsadli shoxning joriy tarkibini saqlaydigan maxsus strategiya. Merge-commit yaratiladi, ammo tarkib o‘zgarishsiz qoladi. Tarixda birlashtirish faktini qayd etish, lekin begona shoxdagi barcha o‘zgarishlarni rad etish kerak bo‘lganda foydali.

Merge-mojarolarini hal qilish

Merge-mojarosi bir faylning bir xil qatorlari ikkala shoxda turlicha o‘zgartirilganda yuzaga keladi. Git qaysi versiya to‘g‘riligini avtomatik aniqlay olmaydi va merge-ni to‘xtatadi. Mojaro, shuningdek, bir shoxda fayl nomi o‘zgartirilib, ikkinchisida o‘zgartirilganda yoki bir fayl bir vaqtning o‘zida o‘chirilib va o‘zgartirilganda ham yuz berishi mumkin.

Hal qilish jarayoni: Git mojaroli fayllarni markerlar bilan belgilaydi. Faylda <<<<<<< HEAD (bizning versiya), ======= (ajratgich) va >>>>>>> feature (ularning versiyasi) bo‘lgan qismlar paydo bo‘ladi. Dasturchi qo‘lda mojaroli qismni tahrir qiladi, ikki versiyadan kerakli qatorlarni tanlaydi, markerlarni olib tashlaydi, faylni saqlaydi va uni git add orqali indeksga qo‘shadi.

Mojarolarni vizual hal qilish uchun Git mergetool — tashqi taqqoslash vositasini qo‘llab-quvvatlaydi. Mashhur mergetool vositalari: Meld, KDiff3, Beyond Compare, VS Code (ichki mojarolar muharriri). Mergetool uchta panelni ko‘rsatadi: bizning versiya, ularning versiyasi va natija. Dasturchi vizual ravishda yakuniy faylga kiritiladigan kod bloklarini tanlaydi.

bash
# Merge-ni boshlash va mojaroni aniqlash
git merge feature
# MOJARO (tarkib): src/main.swift da merge-mojarosi

# Mojaroli fayllarni tekshir
git status

# Vizual mergetoolni och
git mergetool

# Hal qilgandan so‘ng — qo‘shish va commit
git add src/main.swift
git commit

# Merge-ni bekor qil
git merge --abort

Qachon merge-ni rebase o‘rniga tanlash kerak

Merge rebase-dan afzal bir necha asosiy holatlarda. Birinchisi: boshqa dasturchilar uchun mavjud bo‘lgan ommaviy shoxlar bilan ishlashda. Merge tarixni qayta yozmaydi va hamkasblar xavfsiz sinxronlasha oladi. Ommaviy shoxda rebase ajralib ketadigan tarix va eski commitlarni olgan har bir kishida mojarolar yaratadi.

Ikkinchi holat: funksiya shoxini yakunlashda. Ko‘pchilik jamoalar main-ga merge (--no-ff bayrog‘i bilan) qilishni afzal ko‘radi, chunki bu funksiya integratsiyasi momentini qayd etadi. Bu tarix bo‘ylab navigatsiyani soddalashtiradi va bitta git revert merge-commit orqali butun funksiyani osonlikcha qaytarishga imkon beradi. GitHub Flight sukut bo‘yicha uchta merge variantini taklif qiladi: oddiy merge, squash merge va rebase merge.

Uchinchi holat: ko‘rib chiqilgan pull request bilan ishlashda. GitHub va GitLab turli variantlar bilan merge tugmasini taklif qiladi. Merge (Create a merge commit) — merge-commit bilan to‘liq tarix. Squash and merge — rivojlanish tafsilotlarisiz toza tarix. Rebase and merge — merge-commitsiz chiziqli tarix, ammo commitlarni qayta yozish bilan. Tanlov jamoaning qoidalariga bog‘liq.

  • Ommaviy shoxlar (main, develop) — faqat merge, hech qachon rebase.
  • PR yakunlash — integratsiya momentini qayd etish uchun --no-ff bilan merge.
  • Begona commitlari bo‘lgan shoxlar — merge birovning ishini qayta yozmaydi.
  • Chiqarishdan oldin — merge xavfsizroq, chunki kamroq xavf bor.
  • Birgalikdagi shox — agar shoxda bir nechta dasturchi ishlayotgan bo‘lsa, merge majburiy.

Shoxlarni birlashtirishning eng yaxshi amaliyotlari

Birinchi qoida: merge-dan oldin har doim maqsadli shoxning dolzarb versiyasida bo‘ling. Funksiyani birlashtirishdan oldin git checkout main && git pull ni bajaring. Bu mojarolarni kamaytiradi va merge-commit barcha dolzarb o‘zgarishlarni o‘z ichiga olishini kafolatlaydi. Agar maqsadli shox ancha oldinga ketgan bo‘lsa, avval funksiya shoxida git merge main ni bajaring, shunda mojarolar uning kontekstida hal qilinadi.

Ikkinchi qoida: merge-dan keyin kodni sinovdan o‘tkazing. Merge mojaro bo‘lmagan taqdirda ham xatti-harakatni o‘zgartirishi mumkin. CI/CD quvuri ishlab chiqarishga jo‘natishdan oldin merge-commitda testlarni o‘tkazishi kerak. Ba‘zi jamoalar merge gates — merge-ni o‘tishga qadar bloklaydigan majburiy tekshiruvlardan foydalanadi.

Uchinchi qoida: merge-commitlarni hujjatlashtiring. Standart “Merge branch ‘feature’ into main” xabari kam foydali. Nima birlashtirilganining tavsifini qo‘shish tavsiya etiladi: “Merge authentication module: login, registration, password recovery”. Bu tarix tahlili va regressiyalarni qidirishni soddalashtiradi. Katta loyihalarda merge-commitlar avtomatik ravishda PR nomidan yaratiladi.

  • Dolzarblik — merge-dan oldin maqsadli shoxning yangilanganligiga ishonch hosil qiling (git pull).
  • Sinov — CI/CD natijaviy merge-commitda testlarni o‘tkazishi kerak.
  • Tavsifli xabarlar — merge-commitda qaysi funksiya birlashtirilganini ko‘rsating.
  • Chastota — funksiya shoxlarini imkon qadar erta va tez-tez birlashtiring (maksimum bir hafta).
  • Bekor qilish — git revert merge-commit butun funksiyani to‘liq qaytaradi.

Tez-tez beriladigan savollar

Git-da shoxlarni birlashtirish (merge) nimani anglatadi?

Birlashtirish (merge) — o‘zgarishlarni bir shoxdan ikkinchisiga birlashtirish uchun git merge ni bajarish. Natija birlashtirish faktini qayd etuvchi va ikki shoxdagi o‘zgarishlarni o‘z ichiga olgan merge-commitdir. Bu Git Flow-da funksiya shoxlarini main, develop yoki release-ga integratsiya qilishning asosiy usulidir.

Squash merge oddiy merge-dan qanday farq qiladi?

Squash merge funksiya shoxidagi barcha commitlarni maqsadli shoxda bitta commitga birlashtiradi, oraliq rivojlanish tarixini yo‘qotadi. Oddiy merge merge-commit yaratadi, funksiya shoxidagi barcha commitlarni saqlab qoladi. Squash merge toza tarix beradi, ammo funksiyaning bosqichma-bosqich ishlanishini kuzatishga imkon bermaydi.

Git-da merge-mojarosini qanday hal qilish kerak?

Mojaroli faylni oching, <<<<<<< HEAD va >>>>>>> markerlari bo‘lgan qismlarni toping. Tarkibni tahrir qiling, ikki versiyadan kerakli qatorlarni qoldiring, markerlarni olib tashlang. Faylni saqlang, git add va git commit ni bajaring. Vizual hal qilish uchun git mergetool dan foydalanishingiz mumkin.

Qachon rebase o‘rniga merge dan foydalanish kerak?

Merge har doim ommaviy shoxlar (main, develop, release) uchun ishlatiladi, chunki tarixni qayta yozmaydi. Rebase shaxsiy funksiya shoxlarida ular nashr etilishidan oldin qo‘llaniladi. Shox umumiy repozitoriyning bir qismiga aylangandan va hamkasblar unga murojaat qilgandan so‘ng, faqat merge ga ruxsat beriladi.

Git-da merge-ni qanday bekor qilish mumkin?

Merge tugashidan oldin (mojaro paytida) — git merge --abort birlashtirishni butunlay bekor qiladi. Tugagandan so‘ng — git revert <merge-commit-hash> -m 1 qaytaruvchi commit yaratadi. -m 1 bayrog‘i qaysi ota-ona shoxni saqlashni ko‘rsatadi (maqsadli). Nashr etilgan shoxlar uchun git revert git reset-dan xavfsizroq.

Xulosa

  • Merge — ikki ota-onaga ega merge-commit yaratib, tarixni saqlagan holda shoxlarning xavfsiz birlashtirilishi.
  • Birlashtirish rejimlari — turli maqsadlar uchun regular (--no-ff), squash (--squash) va fast-forward (--ff).
  • Strategiyalar — recursive (standart), octopus (3+ shox), ours (begona o‘zgarishlarni e‘tiborsiz qoldirish).
  • Mojarolar — belgilangan qismlarni tahrir qilish yoki mergetool orqali qo‘lda hal qilinadi.
  • Xavfsizlik — merge mavjud commitlarni o‘zgartirmaydi, shuning uchun ommaviy shoxlar uchun xavfsizdir.
  • Squash merge — barcha commitlarni bittaga birlashtiradi, oraliq rivojlanish tarixini yo‘qotadi.
  • Merge-ni bekor qilish — nashr etilgan o‘zgarishlarni xavfsiz qaytarish uchun -m 1 bayrog‘i bilan git revert merge-commit.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing