Cherry-pick — bu nima, mexanizmi va Git-da qo'llanilishi

Muallif: IT Sectr Nashr etilgan: 2026-05-10 O'qish vaqti: 10 daq

Cherry-pick — bu bir yoki bir nechta mavjud kommitlardan o'zgarishlarni joriy tarmoqqa qo'llaydigan Git buyrug'idir. Merge (butun tarmoqni ko'chiradi) va Rebase (kommitlar ketma-ketligini ko'chiradi) dan farqli o'laroq, cherry-pick faqat belgilangan kommitlarni tanlaydi. git-scm.com, 2025 ma'lumotlariga ko'ra, cherry-pick eng ko'p reliz tarmoqlari o'rtasida tuzatishlarni ko'chirish stsenariylarida talab qilinadi.

Asosiy fikrlar

  • Cherry-pick — kommitlarni to'liq birlashtirmasdan tarmoqlar o'rtasida ko'chirish
  • Aniq ko'chirish — butun tarmoq emas, aniq kommitlar tanlanadi
  • Yangi SHA — har bir cherry-pick o'zgartirilgan xesh bilan yangi kommit yaratadi
  • Hotfix stsenariysi — cherry-pick tuzatishni reliz tarmog'iga ko'chirish uchun qulay
  • Riskler — faol foydalanishda kommitlarning takrorlanishi va kontekst yo'qolishi

Cherry-pick nima?

Cherry-pick — bu belgilangan kommitdan o'zgarishlarni nusxalab, ularni joriy tarmoqdagi yangi kommit sifatida qo'llaydigan Git buyrug'idir. Nomi "gilos tanlash" metaforasidan kelib chiqqan: dasturchi faqat kerakli kommitlarni tanlaydi, qolganlarini e'tiborsiz qoldiradi.

Merge dan farqli o'laroq, cherry-pick merge kommit yaratmaydi va tarmoqlarni to'liq birlashtirishni talab qilmaydi. Rebase dan farqli o'laroq, cherry-pick kommitlar ketma-ketligini emas, faqat belgilanganlarni ko'chiradi. Bu cherry-pickni aniq tuzatishlarni ko'chirish uchun ideal vositaga aylantiradi.

Atlassian, 2025 ma'lumotlariga ko'ra, cherry-pick bir vaqtning o'zida bir nechta reliz tarmoqlari bilan ishlaydigan jamoalarning 47 foizida qo'llaniladi. Cherry-pick, ayniqsa, bir vaqtning o'zida ilovaning bir nechta versiyalari (LTS relizlari) qo'llab-quvvatlanadigan va ular o'rtasida tuzatishlarni ko'chirish talab qilinadigan mobil ishlanmada talab qilinadi.

Ko'chirish mexanizmi

Cherry-pick bajarilganda, Git belgilangan kommit va uning ota-onasi o'rtasidagi diff ni hisoblaydi, so'ngra bu diffni joriy tarmoqqa qo'llaydi. Agar o'zgarishlar konfliktsiz qo'llanilsa — Git bir xil xabar bilan, lekin yangi SHA bilan yangi kommit yaratadi. Agar konflikt bo'lsa — cherry-pick qo'lda hal qilish uchun to'xtatiladi.

Cherry-pick qanday ishlaydi

Sintaksis oddiy: ko'chirmoqchi bo'lgan kommitning xeshini ko'rsating. Git o'zgarishlarni joriy tarmoqqa yangi kommit sifatida nusxalaydi. Bir vaqtning o'zida bir nechta kommitlarni va butun diapazonlarni ko'chirish qo'llab-quvvatlanadi.

bash
# Bitta kommitni joriy tarmoqqa ko'chirish
git cherry-pick a1b2c3d4

# Bir nechta kommitlarni ko'chirish
git cherry-pick a1b2c3d4 e5f6g7h8

# Kommitlar diapazonini ko'chirish (a1b2 dan f9e8 gacha, a1b2 ni hisobga olmaganda)
git cherry-pick a1b2c3d4..f9e8d7c6

Cherry-pick bajarilgandan so'ng, joriy tarmoq asl nusxadagi o'zgarishlar bilan yangi kommit oladi. Kommit xabari sukut bo'yicha asl nusxadan nusxalanadi, lekin -n (kommit yaratma) yoki --edit (xabarni tahrir qil) bayrog'i bilan o'zgartirilishi mumkin.

Tuzatishni ko'chirish misoli

Oddiy stsenariyni ko'rib chiqaylik: develop-da release/v2.0 reliz tarmog'ida ham mavjud bo'lgan tanqidiy xato topildi va tuzatildi. Butun develop-ni reliz tarmog'iga birlashtirmasdan, faqat shu tuzatishni ko'chirish kerak.

bash
# Develop-da tuzatish bilan kommit xeshini top
git log --oneline develop
# a1b2c3d fix: null check in payment processing

# Reliz tarmog'iga o't
git checkout release/v2.0

# Tuzatishni qo'lla
git cherry-pick a1b2c3d4

# Agar konflikt bo'lsa — hal qil va davom et
git add src/payment/PaymentProcessor.kt
git cherry-pick --continue

-x bayrog'i kommit xabariga asl SHA-ga havola qo'shadi: "(cherry picked from commit a1b2c3d4)". Bu kommit qayerdan ko'chirilganini kuzatishni osonlashtiradi. Vaqtinchalik qoralamalardan tashqari barcha stsenariylarda -x dan foydalanish tavsiya etiladi.

Konfliktlar bilan ishlash

Konflikt paytida cherry-pick merge kabi ishlaydi: Git to'xtaydi va konfliktli fayllarni belgilaydi. Dasturchi konfliktni hal qiladi, git add ni bajaradi va keyin git cherry-pick --continue ni amalga oshiradi. Bekor qilish uchun — git cherry-pick --abort. --strategy bayrog'i birlashtirish strategiyasini belgilashga imkon beradi (masalan, variantlar bilan recursive).

bash
# Cherry-pick da konfliktni hal qilish
# Git konfliktli fayllarni ko'rsatadi
git status

# Qo'lda hal qil, so'ng:
git add ruxsat_etilgan_fayl.kt
git cherry-pick --continue

# Yoki cherry-pick ni bekor qil:
git cherry-pick --abort

Cherry-pick qachon qo'llaniladi

Cherry-pick butun tarmoqlarni birlashtirmasdan aniq o'zgarishlarni ko'chirish talab qilinadigan stsenariylarda optimaldir. Cherry-pick eng yaxshi tanlov bo'lgan beshta asosiy holatni ko'rib chiqaylik.

  • Hotfix ko'chirish — tuzatish develop-da topilgan, lekin uni reliz tarmog'iga (release/v2.0) qo'llash kerak. Cherry-pick develop-dagi tugallanmagan funksiyalarga tegmasdan faqat tuzatish kommitini ko'chiradi
  • Eski versiyalarga backport — joriy versiya uchun tuzatish LTS reliziga ko'chirilishi kerak. Butun kod bazasini birlashtirish o'rniga cherry-pick faqat kerakli kommitlarni tanlaydi
  • Boshqa tarmoqdagi kommitni bekor qilish — kommit noto'g'ri tarmoqqa qilingan bo'lsa, cherry-pick uni to'g'ri tarmoqqa ko'chiradi va asl kommit bekor qilinadi
  • Hujjatlarni ko'chirish — barcha tarmoqlarda bo'lishi kerak bo'lgan README yoki konfiguratsiya fayllaridagi o'zgarishlarni cherry-pick orqali ko'chirish qulay
  • Tanlab qo'llash — prototip tarmog'idan butun prototipni asosiy ishlanmaga ko'chirmasdan faqat bitta muvaffaqiyatli kommitni olish kerak

Mobil ishlanma uchun cherry-pick ilovaning bir nechta versiyalarini qo'llab-quvvatlashda juda muhimdir. Masalan, Google Play-da allaqachon chiqarilgan 3.2 versiyasida xato topilsa, develop esa 4.0 versiyasi uchun kodni o'z ichiga olsa — cherry-pick barcha breaking changes larni birlashtirmasdan tuzatishni v3.x tarmog'iga ko'chirishga imkon beradi. Bu, ayniqsa, turli API va bog'liqliklarga ega ikki yoki undan ortiq asosiy versiyalarni bir vaqtning o'zida qo'llab-quvvatlaydigan loyihalar uchun dolzarbdir.

Amaliyotdan misol: mobil ilovada Android 12 da Google Sign-In orqali avtorizatsiya paytida crash aniqlandi. Tuzatish develop-ga kiritildi va ko'rib chiqishdan o'tdi. Biroq joriy reliz tarmog'i v2.5 allaqachon beta-test bosqichida. Develop-dan release/v2.5 ga fix kommitining cherry-pick i tuzatishni keyingi relizga kiritish imkonini beradi, hali chiqarishga tayyor bo'lmagan qolgan o'zgarishlarni ko'chirmasdan.

Mobil loyihalarda cherry-pick dan foydalanganda bog'liqliklarni hisobga olish muhim: agar tuzatish reliz tarmog'ining ajralish nuqtasidan keyin develop-da o'zgartirilgan fayllarga ta'sir qilsa, cherry-pick to'liq bo'lmagan o'zgarishlar to'plamini keltirishi mumkin. Bunday hollarda barcha bog'liq o'zgarishlar ham ko'chirilganligini tekshirish kerak, aks holda ilova yig'ilmasligi yoki noto'g'ri ishlashi mumkin. O'zgarishlarni umumiy tarmoqqa surishdan oldin har doim cherry-pick dan keyin yig'ilishni tekshiring.

Cherry-pick vs Merge vs Rebase

Git-da o'zgarishlarni integratsiya qilishning uchta asosiy vositasi — merge, rebase va cherry-pick — turli vazifalarni hal qiladi. Tanlov qancha o'zgarishlarni ko'chirish kerakligi va tarix qanday ko'rinishi kerakligiga bog'liq.

MezonMergeRebaseCherry-pick
HajmButun tarmoqKommitlar seriyasiTanlangan kommitlar
TarixTarmoqlanishni saqlaydiChiziqliChiziqli
Merge kommitHa (ff dan tashqari)Yo'qYo'q
AvtomatlashtirishTo'liqZanjir bo'ylabFaqat belgilanganlar
Ommaviy tarmoqlar uchunXavfsizXavfliXavfsiz

Merge — ikkala tarmoqni to'liq birlashtirish va tarmoqlanish haqidagi ma'lumotni saqlash kerak bo'lganda. Rebase — shaxsiy tarmoqni toza tarix bilan dolzarb holatga yangilash kerak bo'lganda. Cherry-pick — faqat bitta yoki bir nechta tanlangan kommit kerak bo'lganda.

Amalda bu vositalar birlashtiriladi: funksiya develop-ga davriy rebase bilan ishlab chiqiladi, keyin --no-ff merge orqali birlashtiriladi va boshqa tarmoqqa tuzatishni ko'chirish zarur bo'lganda cherry-pick ishlatiladi. Har bir vosita o'z bosqichida o'z vazifasini hal qiladi.

Cherry-pick risklari va cheklovlari

Cherry-pick — foydali, ammo noto'g'ri yoki haddan tashqari foydalanilganda potensial xavfli vosita. Asosiy risklar kommitlarning takrorlanishi, kontekst yo'qolishi va keyingi birlashtirishlardagi konfliktlar bilan bog'liq.

  • Kommitlarning takrorlanishi — agar xuddi shu kommit keyinchalik merge orqali tarmoqqa kelsa, Git o'zgarishlar bo'yicha bir xil ikkinchi kommit yaratadi. Bu tarixni ifloslantiradi va git bisect ni qiyinlashtiradi
  • Kontekst yo'qolishi — cherry-pick diff ni ko'chiradi, lekin ota-ona kommitlar va bog'liqliklar haqidagi ma'lumotni ko'chirmaydi. Agar cherry-pick A bog'liq bo'lgan B kommitisiz A kommitini qo'llasa, mantiqiy xatolar yuzaga kelishi mumkin
  • Merge paytida konfliktlar — cherry-pick dan so'ng tarmoqlarni to'liq birlashtirishda Git bir xil o'zgarishlarni ikki marta ko'rishi va oddiy merge paytida oldini olish mumkin bo'lgan konfliktlar yaratishi mumkin
  • Bog'liqlik yo'qligi -x bayrog'isiz kommitning boshqa tarmoqdan ko'chirilganligini tushunish mumkin emas. O'zgarishning kelib chiqishini qidirishda dasturchi kommitning kelib chiqishini aniqlash uchun soatlab vaqt sarflashi mumkin

Riskler ni minimallashtirish bo'yicha tavsiyalar: har doim asl SHA ni ko'rsatish uchun -x bayrog'idan foydalaning, cherry-pick sababini kommit xabarida hujjatlashtiring va imkon qadar kontekst ruxsat berganda cherry-pick o'rniga merge dan foydalaning. Agar cherry-pick lar ko'p bo'lsa — tarmoqlarni qayta tuzishni ko'rib chiqing.

Cherry-pick da tekshirishlarni avtomatlashtirish

CI quvurlari cherry-pick ni alohida stsenariy sifatida hisobga olishi kerak. Avtomatik tekshirishni sozlash tavsiya etiladi: cherry-pick kommiti yaratilganda CI o'zgartirilgan fayllar kutilgan to'plamga mos kelishini tekshiradi va ta'sirlangan modullar uchun testlarni ishga tushiradi. Bu tarmoqlar o'rtasida aniq o'zgarishlarni ko'chirishda regressiya xavfini kamaytiradi.

Tez-tez beriladigan savollar

Cherry-pick git revert dan nima bilan farq qiladi?

Cherry-pick o'zgarishlarni kommitdan boshqa tarmoqqa ko'chiradi. Revert bir xil tarmoqdagi belgilangan kommitning o'zgarishlarini bekor qiladigan yangi kommit yaratadi. Revert tarixni o'chirmaydi — teskari o'zgarish qo'shadi.

Bir vaqtning o'zida bir nechta kommitlarni cherry-pick qilish mumkinmi?

Ha: git cherry-pick A B C — A, B va C kommitlarini tartib bilan ko'chirish. Yoki git cherry-pick A..C — A dan C gacha barcha kommitlarni ko'chirish (A ni hisobga olmaganda). Ko'chirish tartibi buyruqdagi tartibga mos keladi.

Cherry-pick merge kommitlari bilan qanday ishlaydi?

Sukut bo'yicha cherry-pick merge kommit bilan ishlamaydi, chunki merge kommit ikki ota-onaga ega. Qaysi ota-ona bilan solishtirishni ko'rsatish uchun -m 1 bayrog'idan foydalaning. -m 1 birinchi ota-onaga nisbatan diff ni oladi.

Cherry-pick noto'g'ri kommit yaratgan bo'lsa nima qilish kerak?

Bekor qilish cherry-pick git reset --hard HEAD~1 orqali amalga oshirilishi mumkin, agar bu oxirgi kommit bo'lsa. Kommit allaqachon surilgan bo'lsa — bekor qiluvchi kommit yaratish uchun git revert <SHA> dan foydalaning.

Cherry-pick kommitni bir tarmoqdan o'sha tarmoqqa ko'chira oladimi?

Ma'nosi yo'q, lekin texnik jihatdan mumkin. Kommit allaqachon tarmoqda mavjud bo'lsa, Git o'zgarishlarning allaqachon qo'llanilganligini aniqlaydi va xabar beradi: „The previous cherry-pick is now empty, possibly due to conflict resolution.“ Kommit qayta yaratilmaydi.

Xulosa

  • Cherry-pick — tanlangan kommitlarni to'liq birlashtirmasdan tarmoqlar o'rtasida ko'chirish
  • Mexanizm — Git kommit diffini hisoblab, uni target da yangi kommit sifatida qo'llaydi
  • Hotfix stsenariysi — asosiy use case: tuzatishni reliz tarmog'iga ko'chirish
  • -x bayrog'i — ko'chirilgan kommitning asl SHA sini hujjatlashtirish uchun majburiy
  • Riskler — kommitlarning takrorlanishi, kontekst yo'qolishi, kelajakdagi merge larda konfliktlar
  • Merge dan farq — cherry-pick aniq, merge tarmoqlarni to'liq birlashtiradi
  • Rebase dan farq — cherry-pick kommitlarni qo'lda tanlaydi, rebase zanjir uchun avtomatik

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