Cherry-pick — bu nədir, mexanizmi və Git-də tətbiqi

Müəllif: IT Sectr Dərc olunub: 2026-05-10 Oxuma vaxtı: 10 dəq

Cherry-pick — bu, bir və ya bir neçə mövcud commitdən dəyişiklikləri cari budağa tətbiq edən Git əmridir. Merge (bütün budağı köçürür) və Rebase (commitlər ardıcıllığını köçürür) əksinə, cherry-pick yalnız göstərilən commitləri seçir. git-scm.com, 2025 məlumatlarına görə, cherry-pick ən çox buraxılış budaqları arasında düzəlişlərin köçürülməsi ssenarilərində tələb olunur.

Əsas məqamlar

  • Cherry-pick — commitlərin tam birləşmədən budaqlar arasında köçürülməsi
  • Dəqiq köçürmə — bütün budaq deyil, konkret commitlər seçilir
  • Yeni SHA — hər cherry-pick dəyişdirilmiş heşlə yeni commit yaradır
  • Hotfix ssenarisi — cherry-pick düzəlişin buraxılış budağına köçürülməsi üçün əlverişlidir
  • Riskler — aktiv istifadə zamanı commitlərin təkrarlanması və kontekst itkisi

Cherry-pick nədir?

Cherry-pick — bu, göstərilən commitdən dəyişiklikləri kopyalayan və onları cari budaqda yeni commit kimi tətbiq edən Git əmridir. Adı "alma seçmək" metaforasından gəlir: tərtibatçı yalnız lazım olan commitləri seçir, qalanlarını nəzərə almır.

Merge əksinə, cherry-pick merge commit yaratmır və budaqların tam birləşməsini tələb etmir. Rebase əksinə, cherry-pick commitlər ardıcıllığını deyil, yalnız göstərilənləri köçürür. Bu, cherry-picki dəqiq düzəliş köçürmələri üçün ideal alət edir.

Atlassian, 2025 məlumatlarına görə, cherry-pick eyni anda bir neçə buraxılış budağı ilə işləyən komandaların 47%-də istifadə olunur. Cherry-pick xüsusilə eyni anda tətbiqin bir neçə versiyasının (LTS buraxılışları) dəstəkləndiyi və onlar arasında düzəlişlərin köçürülməsi tələb olunan mobil inkişafda tələb olunur.

Köçürmə mexanizmi

Cherry-pick icra edilərkən Git göstərilən commitlə onun valideyni arasında diff hesablayır, sonra bu diff-i cari budağa tətbiq edir. Dəyişikliklər konfliktsiz tətbiq olunarsa — Git eyni mesajla, lakin yeni SHA ilə yeni commit yaradır. Konflikt varsa — cherry-pick əl ilə həll üçün dayandırılır.

Cherry-pick necə işləyir

Syntax sadədir: köçürmək istədiyiniz commitin heşini göstərin. Git dəyişiklikləri cari budağa yeni commit kimi kopyalayacaq. Bir neçə commitin və tam diapazonların köçürülməsi dəstəklənir.

bash
# Bir commitin cari budağa köçürülməsi
git cherry-pick a1b2c3d4

# Bir neçə commitin köçürülməsi
git cherry-pick a1b2c3d4 e5f6g7h8

# Commit diapazonunun köçürülməsi (a1b2-dən f9e8-dək, a1b2 daxil deyil)
git cherry-pick a1b2c3d4..f9e8d7c6

Cherry-pick icrasından sonra cari budaq orijinaldan dəyişikliklərlə yeni commit alır. Commit mesajı standart olaraq orijinaldan kopyalanır, lakin -n (commit yaratma) və ya --edit (mesajı redaktə et) bayrağı ilə dəyişdirilə bilər.

Düzəliş köçürmə nümunəsi

Tipik ssenarini nəzərdən keçirək: develop-da kritik səhv tapılıb düzəldildi, bu səhv release/v2.0 buraxılış budağında da mövcuddur. Yalnız bu fiksi köçürmək lazımdır, bütün develop-ı buraxılış budağına birləşdirmədən.

bash
# Develop-da düzəlişlə commitin heşini tap
git log --oneline develop
# a1b2c3d fix: null check in payment processing

# Buraxılış budağına keç
git checkout release/v2.0

# Düzəlişi tətbiq et
git cherry-pick a1b2c3d4

# Konflikt varsa — həll et və davam et
git add src/payment/PaymentProcessor.kt
git cherry-pick --continue

-x bayrağı commit mesajına orijinal SHA-ya istinad əlavə edir: "(cherry picked from commit a1b2c3d4)". Bu, commit-in haradan köçürüldüyünü izləməyi asanlaşdırır. Müvəqqəti qaralamalar istisna olmaqla, bütün ssenarilərdə -x istifadə etmək tövsiyə olunur.

Konfliktlərlə iş

Konflikt zamanı cherry-pick merge kimi davranır: Git dayanır və konfliktli faylları qeyd edir. Tərtibatçı konflikti həll edir, git add edir və git cherry-pick --continue icra edir. Ləğv etmək üçün — git cherry-pick --abort. --strategy bayrağı birləşmə strategiyasını təyin etməyə imkan verir (məsələn, seçimlərlə recursive).

bash
# Cherry-pick zamanı konfliktin həlli
# Git konfliktli faylları göstərir
git status

# Əl ilə həll et, sonra:
git add icazəli_fayl.kt
git cherry-pick --continue

# Və ya cherry-picki ləğv et:
git cherry-pick --abort

Cherry-pick nə vaxt tətbiq edilməlidir

Cherry-pick tam budaqları birləşdirmədən dəqiq dəyişiklik köçürməsi tələb olunan ssenarilərdə optimaldır. Cherry-pick-in ən yaxşı seçim olduğu beş əsas halı nəzərdən keçirək.

  • Hotfix köçürməsi — düzəliş develop-da tapılıb, lakin onu buraxılış budağına (release/v2.0) tətbiq etmək lazımdır. Cherry-pick develop-dan bitməmiş funksiyalara toxunmadan yalnız fiks commitini köçürür
  • Köhnə versiyalara backport — cari versiya üçün düzəliş LTS buraxılışına köçürülməlidir. Bütün cari kod bazasını birləşdirmək əvəzinə cherry-pick yalnız lazım olan commitləri seçir
  • Başqa budaqda commitin ləğvi — commit səhv budaqda edilibsə, cherry-pick onu düzgün budağa köçürür, orijinal commit isə ləğv edilir
  • Sənədləşmənin köçürülməsi — bütün budaqlarda olmalı olan README və ya konfiqurasiya fayllarındakı dəyişiklikləri cherry-pick vasitəsilə köçürmək rahatdır
  • Seçmə tətbiq — prototip budağından bütün prototipi əsas inkişafa köçürmədən yalnız bir uğurlu commit götürmək lazımdır

Mobil inkişaf üçün cherry-pick tətbiqin bir neçə versiyasını dəstəkləyərkən kritik əhəmiyyət daşıyır. Məsələn, səhv Google Play-də artıq buraxılmış versiya 3.2-də tapılarsa, develop isə versiya 4.0 üçün kod ehtiva edirsə — cherry-pick bütün breaking changes-ləri birləşdirmədən düzəlişi v3.x budağına köçürməyə imkan verir. Bu, xüsusilə eyni anda fərqli API və asılılıqları olan iki və daha çox əsas versiyanın dəstəkləndiyi layihələr üçün aktualdır.

Təcrübədən nümunə: mobil tətbiqdə Android 12-də Google Sign-In vasitəsilə avtorizasiya zamanı crash aşkar edildi. Düzəliş develop-a daxil edildi və review-dən keçdi. Lakin cari buraxılış budağı v2.5 artıq beta-test mərhələsindədir. Develop-dan release/v2.5-ə fiks commitinin cherry-pick-i düzəlişi növbəti buraxılışa daxil etməyə imkan verir, hələ buraxılışa hazır olmayan qalan dəyişiklikləri köçürmədən.

Mobil layihələrdə cherry-pick istifadə edərkən asılılıqları nəzərə almaq vacibdir: əgər düzəliş buraxılış budağının ayrılma nöqtəsindən sonra develop-da dəyişdirilmiş fayllara təsir edirsə, cherry-pick natamam dəyişikliklər dəsti gətirə bilər. Belə hallarda bütün əlaqəli dəyişikliklərin də köçürüldüyünü yoxlamaq lazımdır, əks halda tətbiq qurula bilməz və ya düzgün işləməz. Dəyişiklikləri ümumi budağa push etmədən əvvəl həmişə cherry-pick-dən sonra qurulmanı yoxlayın.

Cherry-pick vs Merge vs Rebase

Git-də dəyişikliklərin inteqrasiyası üçün üç əsas alət — merge, rebase və cherry-pick — müxtəlif vəzifələri həll edir. Seçim, hansı həcmdə dəyişikliklərin köçürülməsi və tarixçənin necə görünməsi lazım olduğundan asılıdır.

KriteriyaMergeRebaseCherry-pick
HəcmBütün budaqCommitlər seriyasıSeçilmiş commitlər
TarixçəBudaqlanmanı qoruyurXəttiXətti
Merge commitBəli (ff xaric)XeyrXeyr
AvtomatlaşdırmaTamZəncir boyuYalnız göstərilənlər
İctimai budaqlar üçünTəhlükəsizTəhlükəliTəhlükəsiz

Merge — iki budağı tam birləşdirmək və budaqlanma haqqında məlumatı qorumaq lazım olduqda. Rebase — şəxsi budağı təmiz tarixçə ilə aktual vəziyyətə yeniləmək lazım olduqda. Cherry-pick — yalnız bir commit və ya bir neçə seçilmiş commit lazım olduqda.

Praktikada bu alətlər birləşdirilir: funksiya develop-a dövri rebase ilə hazırlanır, sonra --no-ff merge vasitəsilə birləşdirilir, və başqa budağa düzəliş köçürmək lazım olduqda cherry-pick istifadə olunur. Hər alət öz mərhələsində öz vəzifəsini həll edir.

Cherry-pick riskləri və məhdudiyyətləri

Cherry-pick — faydalı, lakin düzgün olmayan və ya həddindən artıq istifadə edildikdə potensial təhlükəli alətdir. Əsas risklər commitlərin təkrarlanması, kontekst itkisi və sonrakı birləşmələrdə konfliktlərlə bağlıdır.

  • Commitlərin təkrarlanması — eyni commit daha sonra merge vasitəsilə budağa daxil olarsa, Git dəyişikliklər baxımından eyni olan ikinci commit yaradır. Bu, tarixçəni çirkləndirir və git bisect-i çətinləşdirir
  • Kontekst itkisi — cherry-pick diff-i köçürür, lakin valideyn commitlər və asılılıqlar haqqında məlumatı köçürmür. Əgər cherry-pick A-nın asılı olduğu B commiti olmadan A commitini tətbiq edərsə, məntiqi səhvlər yarana bilər
  • Merge zamanı konfliktlər — cherry-pick-dən sonra budaqların tam birləşməsi zamanı Git eyni dəyişiklikləri iki dəfə görə bilər və adi merge zamanı qarşısı alına bilən konfliktlər yarada bilər
  • Əlaqənin olmaması -x bayrağı olmadan commit-in başqa budaqdan köçürüldüyünü anlamaq mümkün deyil. Dəyişikliyin mənşəyini axtararkən tərtibatçı commit-in mənşəyini müəyyən etmək üçün saatlarla vaxt sərf edə bilər

Riskleri minimuma endirmək üçün tövsiyələr: həmişə orijinal SHA-nı göstərmək üçün -x bayrağından istifadə edin, cherry-pick səbəbini commit mesajında sənədləşdirin, və mümkün olduqda kontekst icazə verdikdə cherry-pick əvəzinə merge istifadə edin. Çox sayda cherry-pick varsa — budaqların restrukturizasiyasını nəzərdən keçirin.

Cherry-pick zamanı yoxlamaların avtomatlaşdırılması

CI pipeline-ları cherry-picki ayrıca ssenari kimi nəzərə almalıdır. Avtomatik yoxlamanın qurulması tövsiyə olunur: cherry-pick commiti yaradılarkən CI dəyişdirilmiş faylların gözlənilən dəstə uyğun olub-olmadığını yoxlayır və təsirlənmiş modullar üçün testləri işə salır. Bu, budaqlar arasında dəqiq dəyişiklik köçürməsi zamanı reqressiya riskini azaldır.

Tez-tez verilən suallar

Cherry-pick git revert-dən nə ilə fərqlənir?

Cherry-pick dəyişiklikləri commitdən başqa budağa köçürür. Revert eyni budaqda göstərilən commitin dəyişikliklərini ləğv edən yeni commit yaradır. Revert tarixçəni silmir — əks dəyişiklik əlavə edir.

Eyni anda bir neçə commiti cherry-pick etmək olar?

Bəli: git cherry-pick A B C — A, B və C commitlərinin ardıcıl köçürülməsi. Və ya git cherry-pick A..C — A-dan C-yə qədər bütün commitlərin köçürülməsi (A daxil deyil). Köçürmə ardıcıllığı əmrdəki ardıcıllığa uyğundur.

Cherry-pick merge commitlərlə necə işləyir?

Standart olaraq cherry-pick merge commit ilə işləmir, çünki merge commit-in iki valideyni var. Hansı valideynlə müqayisə edəcəyinizi göstərmək üçün -m 1 bayrağından istifadə edin. -m 1 birinci valideynə nisbətən diff götürür.

Cherry-pick səhv commit yaradarsa nə etməli?

Ləğv etmək üçün cherry-pick git reset --hard HEAD~1 vasitəsilə ləğv edilə bilər, əgər bu son commitdirsə. Commit artıq push edilibsə — ləğv edən commit yaratmaq üçün git revert <SHA> istifadə edin.

Cherry-pick commiti eyni budaqdakı bir budaqdan digərinə köçürə bilər?

Mənası yoxdur, lakin texniki olaraq mümkündür. Commit artıq budaqda mövcuddursa, Git dəyişikliklərin artıq tətbiq edildiyini aşkar edəcək və xəbər verəcək: „The previous cherry-pick is now empty, possibly due to conflict resolution.“ Commit təkrar yaradılmayacaq.

Nəticə

  • Cherry-pick — tam birləşmədən budaqlar arasında seçilmiş commitlərin köçürülməsi
  • Mexanizm — Git commit diffini hesablayır və onu target-də yeni commit kimi tətbiq edir
  • Hotfix ssenarisi — əsas use case: düzəlişin buraxılış budağına köçürülməsi
  • -x bayrağı — köçürülmüş commitin orijinal SHA-sını sənədləşdirmək üçün məcburidir
  • Riskler — commitlərin təkrarlanması, kontekst itkisi, gələcək merge-lərdə konfliktlər
  • Merge-dən fərq — cherry-pick dəqiq, merge budaqları tam birləşdirir
  • Rebase-dən fərq — cherry-pick commitləri əl ilə seçir, rebase zəncir üçün avtomatikdir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun