Cherry-pick एक Git कमांड है जो एक या अधिक मौजूदा कमिट से परिवर्तनों को वर्तमान ब्रांच पर लागू करता है। Merge (पूरी ब्रांच ट्रांसफर करता है) और Rebase (कमिट की श्रृंखला ट्रांसफर करता है) के विपरीत, cherry-pick केवल निर्दिष्ट कमिट का चयन करता है। git-scm.com, 2025 के अनुसार, cherry-pick रिलीज़ ब्रांचों के बीच फिक्स ट्रांसफर करने के परिदृश्यों में सबसे अधिक मांग में है।
मुख्य बातें
Cherry-pick एक Git कमांड है जो निर्दिष्ट कमिट से परिवर्तनों की प्रतिलिपि बनाता है और उन्हें वर्तमान ब्रांच में एक नए कमिट के रूप में लागू करता है। नाम “चेरी चुनने” के रूपक से आया है: डेवलपर केवल उन कमिट का चयन करता है जिनकी उसे आवश्यकता है, बाकी को अनदेखा करता है।
Merge के विपरीत, cherry-pick मर्ज कमिट नहीं बनाता है और ब्रांचों के पूर्ण विलय की आवश्यकता नहीं होती है। Rebase के विपरीत, cherry-pick कमिट की श्रृंखला को स्थानांतरित नहीं करता है — केवल निर्दिष्ट कमिट को। यह cherry-pick को फिक्स के लक्षित स्थानांतरण के लिए एक आदर्श उपकरण बनाता है।
Atlassian, 2025 के अनुसार, cherry-pick का उपयोग 47% टीमों द्वारा किया जाता है जो एक साथ कई रिलीज़ ब्रांचों के साथ काम करती हैं। Cherry-pick विशेष रूप से मोबाइल डेवलपमेंट में मांग में है, जहां एक साथ एप्लिकेशन के कई संस्करण (LTS रिलीज़) समर्थित होते हैं और उनके बीच फिक्स स्थानांतरित करने की आवश्यकता होती है।
Cherry-pick निष्पादित करते समय, Git निर्दिष्ट कमिट और उसके पैरेंट के बीच diff की गणना करता है, फिर इस diff को वर्तमान ब्रांच पर लागू करता है। यदि परिवर्तन बिना विरोध के लागू हो जाते हैं — Git उसी संदेश के साथ लेकिन नए SHA के साथ एक नया कमिट बनाता है। यदि विरोध है — cherry-pick मैन्युअल समाधान के लिए रुक जाता है।
सिंटैक्स cherry-pick सरल है: स्थानांतरित करने के लिए कमिट का हैश निर्दिष्ट करें। Git परिवर्तनों को वर्तमान ब्रांच में एक नए कमिट के रूप में कॉपी करता है। एक बार में कई कमिट और पूरी रेंज का स्थानांतरण समर्थित है।
# एक कमिट को वर्तमान ब्रांच में स्थानांतरित करें
git cherry-pick a1b2c3d4
# एकाधिक कमिट स्थानांतरित करें
git cherry-pick a1b2c3d4 e5f6g7h8
# कमिट की रेंज स्थानांतरित करें (a1b2 से f9e8 तक, a1b2 को छोड़कर)
git cherry-pick a1b2c3d4..f9e8d7c6
Cherry-pick निष्पादित करने के बाद, वर्तमान ब्रांच को स्रोत से परिवर्तनों के साथ एक नया कमिट मिलता है। कमिट संदेश डिफ़ॉल्ट रूप से स्रोत से कॉपी किया जाता है, लेकिन -n फ्लैग (कमिट न बनाएं) या --edit (संदेश संपादित करें) के साथ संशोधित किया जा सकता है।
एक सामान्य परिदृश्य पर विचार करें: develop में एक महत्वपूर्ण बग पाया और ठीक किया गया है, जो रिलीज़ ब्रांच release/v2.0 में भी मौजूद है। पूरे develop को रिलीज़ ब्रांच में मर्ज किए बिना केवल इस फिक्स को स्थानांतरित करने की आवश्यकता है।
# Develop में फिक्स के साथ कमिट हैश खोजें
git log --oneline develop
# a1b2c3d fix: null check in payment processing
# रिलीज़ ब्रांच पर स्विच करें
git checkout release/v2.0
# फिक्स लागू करें
git cherry-pick a1b2c3d4
# यदि विरोध हो — हल करें और जारी रखें
git add src/payment/PaymentProcessor.kt
git cherry-pick --continue
-x फ्लैग कमिट संदेश में मूल SHA के लिए एक संदर्भ जोड़ता है: “(cherry picked from commit a1b2c3d4)”। यह ट्रैक करना आसान बनाता है कि कमिट कहाँ से स्थानांतरित किया गया था। अस्थायी ड्राफ्ट को छोड़कर सभी परिदृश्यों में -x का उपयोग करने की अनुशंसा की जाती है।
विरोध की स्थिति में, cherry-pick merge की तरह व्यवहार करता है: Git रुक जाता है और विरोध वाली फ़ाइलों को चिह्नित करता है। डेवलपर विरोध को हल करता है, git add चलाता है और git cherry-pick --continue निष्पादित करता है। रद्द करने के लिए — git cherry-pick --abort। --strategy फ्लैग मर्ज रणनीति निर्दिष्ट करने की अनुमति देता है (उदाहरण के लिए, विकल्पों के साथ recursive)।
# Cherry-pick के दौरान विरोध का समाधान
# Git विरोध वाली फ़ाइलें दिखाता है
git status
# मैन्युअल रूप से हल करें, फिर:
git add allowed_file.kt
git cherry-pick --continue
# या cherry-pick रद्द करें:
git cherry-pick --abort
Cherry-pick उन परिदृश्यों में इष्टतम है जहां पूरी ब्रांचों को मर्ज किए बिना परिवर्तनों के लक्षित स्थानांतरण की आवश्यकता होती है। आइए पांच मुख्य मामलों पर नज़र डालें जहां cherry-pick सबसे अच्छा विकल्प बन जाता है।
मोबाइल डेवलपमेंट के लिए, एप्लिकेशन के कई संस्करणों का समर्थन करते समय cherry-pick महत्वपूर्ण रूप से आवश्यक है। उदाहरण के लिए, यदि Google Play पर पहले से प्रकाशित संस्करण 3.2 में एक बग पाया जाता है, और develop में संस्करण 4.0 के लिए कोड है — cherry-pick सभी ब्रेकिंग चेंजेस को मर्ज किए बिना v3.x ब्रांच में फिक्स स्थानांतरित करने की अनुमति देता है। यह विशेष रूप से उन परियोजनाओं के लिए प्रासंगिक है जहां विभिन्न API और निर्भरताओं के साथ एक साथ दो या अधिक प्रमुख संस्करण समर्थित होते हैं।
व्यावहारिक उदाहरण: एक मोबाइल एप्लिकेशन में Android 12 पर Google Sign-In के माध्यम से प्रमाणीकरण के दौरान क्रैश पाया गया। फिक्स develop में किया गया और कोड समीक्षा पास करता है। हालांकि, वर्तमान रिलीज़ ब्रांच v2.5 पहले से बीटा परीक्षण चरण में है। Develop से release/v2.5 में फिक्स कमिट का Cherry-pick आगामी रिलीज़ में फिक्स शामिल करने की अनुमति देता है, बिना उन अन्य परिवर्तनों को स्थानांतरित किए जो अभी तक रिलीज़ के लिए तैयार नहीं हैं।
मोबाइल प्रोजेक्ट्स में cherry-pick का उपयोग करते समय, निर्भरताओं पर विचार करना महत्वपूर्ण है: यदि फिक्स उन फ़ाइलों को प्रभावित करता है जो रिलीज़ ब्रांच के विचलन बिंदु के बाद develop में बदल दी गई थीं, तो cherry-pick परिवर्तनों का अधूरा सेट ला सकता है। ऐसे मामलों में, यह सत्यापित करना आवश्यक है कि सभी संबंधित परिवर्तन भी स्थानांतरित किए गए हैं, अन्यथा एप्लिकेशन बिल्ड नहीं हो सकता या गलत तरीके से काम कर सकता है। साझा ब्रांच में परिवर्तन पुश करने से पहले हमेशा cherry-pick के बाद बिल्ड की जाँच करें।
Git में परिवर्तनों को एकीकृत करने के तीन मुख्य उपकरण — merge, rebase और cherry-pick — विभिन्न कार्यों को हल करते हैं। चुनाव इस बात पर निर्भर करता है कि कितना परिवर्तन स्थानांतरित करने की आवश्यकता है और इतिहास कैसा दिखना चाहिए।
| मानदंड | Merge | Rebase | Cherry-pick |
|---|---|---|---|
| दायरा | पूरी ब्रांच | कमिट की श्रृंखला | चयनित कमिट |
| इतिहास | शाखाकरण संरक्षित करता है | रैखिक | रैखिक |
| मर्ज कमिट | हाँ (ff को छोड़कर) | नहीं | नहीं |
| स्वचालन | पूर्ण | श्रृंखला द्वारा | केवल निर्दिष्ट |
| सार्वजनिक ब्रांचों के लिए | सुरक्षित | खतरनाक | सुरक्षित |
Merge — जब आपको दो ब्रांचों को पूरी तरह से मर्ज करने और शाखाकरण जानकारी संरक्षित करने की आवश्यकता हो। Rebase — जब आपको साफ इतिहास के साथ व्यक्तिगत ब्रांच को नवीनतम स्थिति में अपडेट करने की आवश्यकता हो। Cherry-pick — जब आपको केवल एक कमिट या कई चयनित कमिट की आवश्यकता हो।
व्यवहार में, ये उपकरण संयुक्त होते हैं: एक फीचर develop पर आवधिक rebase के साथ विकसित किया जाता है, फिर --no-ff merge के माध्यम से मर्ज किया जाता है, और जब किसी अन्य ब्रांच में फिक्स स्थानांतरित करने की आवश्यकता होती है, तो cherry-pick का उपयोग किया जाता है। प्रत्येक उपकरण अपने चरण में अपने कार्य को हल करता है।
Cherry-pick एक उपयोगी लेकिन संभावित रूप से खतरनाक उपकरण है जब गलत या अत्यधिक उपयोग किया जाता है। मुख्य जोखिम कमिट डुप्लिकेशन, संदर्भ की हानि और बाद के मर्ज के दौरान विरोध से संबंधित हैं।
जोखिम न्यूनीकरण के लिए सिफारिशें: मूल SHA को इंगित करने के लिए हमेशा -x फ्लैग का उपयोग करें, कमिट संदेश में cherry-pick के कारण का दस्तावेज़ीकरण करें, और जब संभव हो तो merge का उपयोग करें जब संदर्भ अनुमति देता है। यदि cherry-pick अधिक हो जाएं — ब्रांच पुनर्संरचना पर विचार करें।
CI पाइपलाइनों को cherry-pick को एक अलग परिदृश्य के रूप में मानना चाहिए। एक स्वचालित जाँच स्थापित करने की अनुशंसा की जाती है: जब कोई cherry-pick कमिट बनाया जाता है, CI सत्यापित करता है कि बदली गई फ़ाइलें अपेक्षित सेट से मेल खाती हैं और प्रभावित मॉड्यूल के लिए परीक्षण चलाता है। यह ब्रांचों के बीच परिवर्तन स्थानांतरित करते समय प्रतिगमन के जोखिम को कम करता है।
अक्सर पूछे जाने वाले प्रश्न
Cherry-pick एक कमिट से परिवर्तनों को दूसरी ब्रांच में स्थानांतरित करता है। Revert एक नया कमिट बनाता है जो उसी ब्रांच में निर्दिष्ट कमिट के परिवर्तनों को वापस लेता है। Revert इतिहास को हटाता नहीं है — यह एक उल्टा परिवर्तन जोड़ता है।
हाँ: git cherry-pick A B C — कमिट A, B और C को क्रम में स्थानांतरित करता है। या git cherry-pick A..C — A से C तक सभी कमिट स्थानांतरित करता है (A को छोड़कर)। स्थानांतरण क्रम कमांड में क्रम से मेल खाता है।
डिफ़ॉल्ट रूप से, मर्ज कमिट का cherry-pick काम नहीं करता क्योंकि मर्ज कमिट के दो पैरेंट होते हैं। तुलना करने के लिए पैरेंट निर्दिष्ट करने हेतु -m 1 फ्लैग का उपयोग करें। -m 1 पहले पैरेंट के सापेक्ष diff लेता है।
रद्द करें cherry-pick git reset --hard HEAD~1 के माध्यम से यदि यह अंतिम कमिट है। यदि कमिट पहले ही पुश किया जा चुका है — वापस लेने वाला कमिट बनाने के लिए git revert <SHA> का उपयोग करें।
कोई मतलब नहीं, लेकिन तकनीकी रूप से संभव है। यदि कमिट पहले से ब्रांच में मौजूद है, Git पता लगाएगा कि परिवर्तन पहले से लागू हैं और रिपोर्ट करेगा: “The previous cherry-pick is now empty, possibly due to conflict resolution.” कमिट फिर से नहीं बनाया जाएगा।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।