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 — 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.
# 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"
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.
# 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
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).
| Strategiya | Shoxlar soni | Mojarolarni hal qilish |
|---|---|---|
| Recursive | 2 | Avtomatik + ours/theirs variantlari |
| Octopus | 3+ | Yo‘q — barcha mojarolar oldindan hal qilinishi kerak |
| Ours | Istalgan | Har doim bizning versiyani tanlaydi, begona o‘zgarishlar e’tiborga olinmaydi |
| Subtree | 2 | Pastki 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-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.
# 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
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.
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.
Tez-tez beriladigan savollar
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 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.
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.
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.
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
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.
Shuningdek o'qing