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 — 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.
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.
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.
# 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.
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.
# 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.
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).
# 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 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.
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.
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.
| Kriteriya | Merge | Rebase | Cherry-pick |
|---|---|---|---|
| Həcm | Bütün budaq | Commitlər seriyası | Seçilmiş commitlər |
| Tarixçə | Budaqlanmanı qoruyur | Xətti | Xətti |
| Merge commit | Bəli (ff xaric) | Xeyr | Xeyr |
| Avtomatlaşdırma | Tam | Zəncir boyu | Yalnız göstərilənlər |
| İctimai budaqlar üçün | Təhlükəsiz | Təhlükəli | Tə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 — 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.
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.
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 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.
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.
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.
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.
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ə
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.
Həm də oxuyun