Cherry-pick: यह क्या है, इसे कैसे करें और Git कमांड्स

लेखक: IT Sectr प्रकाशित: 2026-08-01 पढ़ने का समय: 8 मिनट

Cherry-pick एक Git कमांड है जो निर्दिष्ट कमिट से परिवर्तनों को वर्तमान ब्रांच पर लागू करता है, बिना स्रोत ब्रांच के पूरे इतिहास को स्थानांतरित किए। merge या rebase के विपरीत, cherry-pick प्रत्येक कमिट के साथ व्यक्तिगत रूप से काम करता है: डेवलपर हैश द्वारा एक विशिष्ट कमिट चुनता है और केवल उसके परिवर्तनों को स्थानांतरित करता है। Git दस्तावेज़ीकरण (2026) के अनुसार, cherry-pick रिलीज़ ब्रांचों के बीच सुधारों के लक्षित स्थानांतरण के लिए विशेष रूप से उपयोगी है जब पूर्ण merge अत्यधिक या जोखिमपूर्ण हो। कमांड एक नई हैश के साथ एक नया कमिट बनाता है, लेकिन मूल संदेश और लेखक को बनाए रखता है।

मुख्य बिंदु

  • Cherry-pick — एक ब्रांच से दूसरी ब्रांच में हैश द्वारा एक व्यक्तिगत कमिट स्थानांतरित करना।
  • नई हैश — प्रत्येक cherry-pick मूल से कॉपी किए गए परिवर्तनों के साथ एक नया कमिट बनाता है।
  • एक साथ कई कमिट — git cherry-pick A B C निर्दिष्ट कमिट को क्रमिक रूप से स्थानांतरित करता है।
  • रिलीज़ ब्रांचें — मुख्य परिदृश्य: अनावश्यक कोड के बिना develop से release में बगफिक्स स्थानांतरित करना।
  • विरोध संभव — कमिट लागू करते समय, Git विरोधों को हल करने के लिए कह सकता है।

Git में cherry-pick क्या है

Cherry-pick git cherry-pick कमांड है जो मौजूदा कमिट से परिवर्तन लेता है और उन्हें वर्तमान ब्रांच में एक नए कमिट के रूप में लागू करता है। मूल कमिट अपनी ब्रांच में अपनी जगह पर रहता है, जबकि लक्ष्य ब्रांच में परिवर्तनों की एक प्रतिलिपि बनाई जाती है। यह कमांड तब उपयोगी होता है जब आपको पूरी ब्रांच को स्थानांतरित किए बिना किसी विशिष्ट सुधार को स्थानांतरित करने की आवश्यकता होती है।

वाक्यविन्यास: git cherry-pick <commit-hash>। Git निर्दिष्ट कमिट के अपने पैरेंट के साथ अंतर (diff) का विश्लेषण करता है और उस अंतर को वर्तमान ब्रांच पर लागू करता है। यदि कई फ़ाइलें बदली जाती हैं, तो वे सभी एक साथ स्थानांतरित हो जाती हैं। कमांड रेंज भी स्वीकार करता है: git cherry-pick A..B — A से B तक के सभी कमिट, A को छोड़कर।

फ़्लैग क्षमताओं का विस्तार करते हैं: -n (--no-commit) कमिट बनाए बिना कार्यशील निर्देशिका और इंडेक्स में परिवर्तन लागू करता है — तब उपयोगी जब आपको कई कमिट के परिवर्तनों को एक में संयोजित करने की आवश्यकता होती है। -x फ़्लैग कमिट संदेश में एक पंक्ति (cherry picked from commit ...) जोड़ता है, जिससे इतिहास में परिवर्तनों की उत्पत्ति को ट्रैक करना आसान हो जाता है।

bash
# हैश द्वारा एकल कमिट पर cherry-pick लगाएँ
git cherry-pick a1b2c3d

# कई कमिट पर cherry-pick लगाएँ (क्रमिक रूप से)
git cherry-pick a1b2c3d e4f5g6h i6j7k8l

# बिना auto-commit के cherry-pick लगाएँ
git cherry-pick -n a1b2c3d

# -x फ़्लैग मूल कमिट का संदर्भ जोड़ता है
git cherry-pick -x a1b2c3d

Cherry-pick का उपयोग कब करें

मुख्य परिदृश्य है रिलीज़ ब्रांचों के बीच सुधार स्थानांतरित करना। कल्पना करें: develop में एक गंभीर बग पाया और ठीक किया गया। रिलीज़ ब्रांच release/v2.1 पहले से अलग है और इसमें भी यह बग मौजूद है। पूरे develop को release में merge करने से बहुत सारा अधूरा कोड आएगा, जबकि एकल फिक्स कमिट पर cherry-pick लागू करना एक सुरक्षित और सटीक समाधान है।

दूसरा परिदृश्य है बाद में बहाली के साथ परिवर्तनों को पूर्ववत करना। यदि कोई कमिट git revert के माध्यम से पूर्ववत किया गया और बाद में पता चलता है कि पूर्ववत करना गलत था — पूर्ववत किए गए कमिट पर cherry-pick लागू करने से परिवर्तन बहाल हो जाते हैं। यह revert को पूर्ववत करने से अधिक सही है क्योंकि यह बार-बार विरोध पैदा नहीं करता है।

तीसरा परिदृश्य है एकीकरण परीक्षण के लिए विभिन्न फ़ीचर ब्रांचों से कमिट को संयोजित करना। कई अधूरी ब्रांचों (अधूरे कोड के साथ) को merge करने के बजाय, प्रत्येक से केवल तैयार कमिट चुनें और उनकी संयुक्त कार्यप्रणाली का परीक्षण करें।

  • बगफिक्स — अधूरे कोड के बिना develop से release में सुधार स्थानांतरित करना।
  • Hotfix — hotfix ब्रांच से main और develop दोनों में एक साथ सुधार लागू करना।
  • गलत revert को पूर्ववत करना — परिवर्तन बहाल करने के लिए पूर्ववत किए गए कमिट पर cherry-pick लागू करना।
  • परीक्षण — एकीकरण परीक्षण के लिए विभिन्न ब्रांचों से चुनिंदा कमिट एकत्र करना।

Cherry-pick बनाम rebase और merge

Cherry-pick rebase और merge से इस मायने में भिन्न है कि यह पूरी ब्रांचों के बजाय व्यक्तिगत कमिट के स्तर पर काम करता है। जबकि rebase एक ब्रांच के सभी कमिट स्थानांतरित करता है और merge दो ब्रांचों को जोड़ता है, cherry-pick केवल आवश्यक कमिट चुनता है। यह इसे अधिक सटीक उपकरण बनाता है, लेकिन अधिक मैनुअल भी।

एक और अंतर है लेखकत्व। Cherry-pick के दौरान, Git डिफ़ॉल्ट रूप से मूल कमिट के लेखक को बनाए रखता है, लेकिन committer वर्तमान उपयोगकर्ता बन जाता है। कमिट संदेश -x फ़्लैग के माध्यम से उत्पत्ति को ट्रैक कर सकता है। Rebase के दौरान, लेखक और committer दोनों नई हैश के साथ वर्तमान उपयोगकर्ता बन जाते हैं।

प्रदर्शन: एकल कमिट पर cherry-pick लगाना कई कमिट वाली दो ब्रांचों को merge करने से तेज़ है। लेकिन यदि आपको दर्जनों कमिट स्थानांतरित करने की आवश्यकता है, तो एक अस्थायी ब्रांच बनाना और rebase करना बेहतर है — यह अधिक कुशल होगा और दर्जनों हैश निर्दिष्ट करने की आवश्यकता नहीं होगी।

संक्रियादायरादुष्प्रभाव
Cherry-pickव्यक्तिगत कमिटनई हैश, कोड दोहराव
Rebaseब्रांच के सभी कमिटइतिहास पुनर्लेखन, नई हैश
Mergeपूर्ण ब्रांच विलयMerge कमिट, इतिहास संरक्षण

कई कमिट स्थानांतरित करना

कई कमिट को एक कमांड से स्थानांतरित किया जा सकता है: git cherry-pick A B C। Git निर्दिष्ट क्रम में कमिट को क्रमिक रूप से लागू करता है। यदि कोई कमिट विरोध का कारण बनता है, तो cherry-pick रुक जाता है, और डेवलपर को विरोध हल करना होगा, फिर git cherry-pick --continue के साथ जारी रखना होगा।

कमिट रेंज: git cherry-pick A..B (A के बाद B तक के सभी कमिट, A को छोड़कर) और git cherry-pick A^..B (A से B तक के सभी कमिट)। रेंज तब सुविधाजनक होती हैं जब आपको पैरेंट संबंध के बिना एक ब्रांच से सभी कमिट स्थानांतरित करने की आवश्यकता होती है — उदाहरण के लिए, पुरानी ब्रांच से नई ब्रांच में एक पूर्ण फ़ीचर स्थानांतरित करते समय।

--strategy फ़्लैग यह निर्धारित करता है कि Git परिवर्तन कैसे लागू करेगा। डिफ़ॉल्ट रूप से recursive रणनीति का उपयोग किया जाता है, लेकिन आप विरोध पक्ष को स्वचालित रूप से चुनने के लिए ours या theirs निर्दिष्ट कर सकते हैं। --mainline फ़्लैग merge कमिट पर cherry-pick लगाते समय उपयोग किया जाता है — यह पैरेंट नंबर (1 या 2) निर्दिष्ट करता है जिसके सापेक्ष diff की गणना की जाती है।

bash
# Cherry-pick कमिट रेंज
git cherry-pick develop~5..develop~2

# Merge कमिट पर cherry-pick लगाएँ (पैरेंट निर्दिष्ट करें)
git cherry-pick -m 1 m9n0o1p

# theirs रणनीति का उपयोग करें
git cherry-pick --strategy=recursive \
  --strategy-option=theirs a1b2c3d

# विरोध समाधान के बाद जारी रखें
git cherry-pick --continue

Cherry-pick के दौरान विरोध

Cherry-pick के दौरान विरोध तब होता है जब स्थानांतरित किए जा रहे कमिट के परिवर्तन उसी पंक्तियों को प्रभावित करते हैं जिन्हें लक्ष्य ब्रांच में बदला गया था। Git निष्पादन रोक देता है, विरोध वाली फ़ाइलों को चिह्नित करता है, और समाधान की प्रतीक्षा करता है। स्थिति में, ऐसी फ़ाइलें both modified के रूप में दिखाई देती हैं।

विरोध हल करने के चरण: विरोध वाली फ़ाइल खोलें, विरोध चिह्नक खोजें (<<<<<<<, =======, >>>>>>>), सामग्री संपादित करें, चिह्नक हटाएँ, हल की गई फ़ाइलों के लिए git add चलाएँ, और git cherry-pick --continue निष्पादित करें। यदि विरोध हल नहीं किया जा सकता — git cherry-pick --abort पूरे cherry-pick को रद्द कर देता है, ब्रांच को उसकी मूल स्थिति में लौटाता है।

एक सामान्य समस्या: कमिट में पहले से मौजूद परिवर्तनों के समतुल्य परिवर्तन हैं। इस मामले में, Git cherry-pick का प्रयास करते समय “nothing to commit” या “empty commit” रिपोर्ट करता है। --keep-redundant-commits और --empty=keep फ़्लैग Git को अनुक्रम बनाए रखने के लिए एक खाली कमिट बनाने के लिए मजबूर करते हैं, जबकि --skip ऐसे कमिट को छोड़ने की अनुमति देता है।

bash
# Cherry-pick के दौरान विरोध — रुकें
git cherry-pick a1b2c3d
# error: a1b2c3d... कमिट संदेश लागू नहीं किया जा सका

# विरोध हल करें → इंडेक्स में जोड़ें
git add src/conflicted_file.swift
git cherry-pick --continue

# खाली कमिट छोड़ें (पहले से लागू)
git cherry-pick --skip

# पूर्ण निरस्तीकरण
git cherry-pick --abort

Cherry-pick की सर्वोत्तम प्रथाएँ

पहला नियम: हमेशा सत्यापित करें कि स्थानांतरित किया जा रहा कमिट आत्मनिर्भर है। यदि कमिट A कमिट B के परिवर्तनों पर निर्भर करता है जो स्थानांतरित नहीं किया जा रहा है, तो A पर cherry-pick लगाने से बिल्ड टूट सकता है। Cherry-pick से पहले, git show --stat <hash> के माध्यम से यह जाँचना उपयोगी है कि कमिट ने कौन सी फ़ाइलें बदली हैं।

दूसरा नियम: cherry-pick संचालन का दस्तावेज़ीकरण करें। -x फ़्लैग का उपयोग करें ताकि कमिट संदेश मूल कमिट के संदर्भ को बनाए रखे। यह बाद के इतिहास विश्लेषण के दौरान यह समझने में मदद करेगा कि परिवर्तन कहाँ से आया। -x के बिना, cherry-pick एक नियमित कमिट जैसा दिखता है, और इसकी उत्पत्ति केवल git log --graph के माध्यम से निर्धारित की जा सकती है।

तीसरा नियम: उन ब्रांचों के बीच cherry-pick से बचें जो बहुत अधिक विचलित हो गई हैं। यदि कमिट बनाए जाने के बाद बहुत समय बीत चुका है और कोडबेस में काफी बदलाव आया है, तो विरोध असंख्य और जटिल होंगे। ऐसे मामलों में, लक्ष्य ब्रांच में सुधार को फिर से लागू करना बेहतर है — दर्जनों विरोधों को हल करने की तुलना में इसमें कम समय लगेगा।

  • Cherry-pick केवल बाहरी निर्भरताओं के बिना आत्मनिर्भर कमिट।
  • -x फ़्लैग संदेश में कमिट उत्पत्ति का दस्तावेज़ीकरण करने के लिए अनिवार्य है।
  • बचें महत्वपूर्ण कोडबेस विचलन वाले पुराने कमिट पर cherry-pick लगाने से।
  • CI/CD cherry-pick के बाद बिल्ड सत्यापित करें: विरोध नहीं हुआ हो सकता है, लेकिन कोड संकलित नहीं हो सकता है।
  • PR टिप्पणी pull request बनाते समय इंगित करें कि cherry-pick के माध्यम से कौन से कमिट स्थानांतरित किए गए थे।

अक्सर पूछे जाने वाले प्रश्न

कमिट पर cherry-pick लगाने का क्या अर्थ है?

Cherry-pick लगाना का अर्थ है git cherry-pick के माध्यम से निर्दिष्ट कमिट के परिवर्तनों को वर्तमान ब्रांच पर लागू करना। कमांड समान परिवर्तनों के साथ लेकिन नई हैश के साथ एक नया कमिट बनाता है। मूल कमिट अपनी ब्रांच में अपरिवर्तित रहता है। यह पूरी ब्रांच को merge करने का एक विकल्प है जब केवल एक विशिष्ट कमिट की आवश्यकता होती है।

merge के बजाय cherry-pick का उपयोग कब करें?

Cherry-pick चुना जाता है जब आपको पूरी ब्रांच को स्थानांतरित किए बिना एक या अधिक विशिष्ट कमिट स्थानांतरित करने की आवश्यकता होती है। Merge का उपयोग पूर्ण ब्रांच विलय के लिए किया जाता है। एक विशिष्ट cherry-pick परिदृश्य विकास ब्रांच से रिलीज़ ब्रांच में बगफिक्स स्थानांतरित करना है जहाँ अन्य परिवर्तन अभी तैयार नहीं हैं।

क्या cherry-pick को पूर्ववत किया जा सकता है?

पूरा होने से पहले — git cherry-pick --abort ऑपरेशन को पूरी तरह से रद्द कर देता है। सफलतापूर्वक पूरा होने के बाद — git revert <hash> एक कमिट बनाता है जो cherry-pick परिवर्तनों को पूर्ववत करता है। --abort से अंतर: revert कमिट को इतिहास से नहीं हटाता, बल्कि एक नया पूर्ववत करने वाला कमिट बनाता है।

यदि cherry-pick एक खाली कमिट बनाता है तो क्या करें?

खाली कमिट तब होता है जब परिवर्तन पहले से ही लक्ष्य ब्रांच में मौजूद हों। ऐसे कमिट को छोड़ने के लिए git cherry-pick --skip का उपयोग करें, या हैश अनुक्रम बनाए रखने के लिए git cherry-pick --keep-redundant-commits का उपयोग करें।

Cherry-pick rebase से कैसे भिन्न है?

Cherry-pick चयनित कमिट (एक-एक करके या सूची के रूप में) को वर्तमान ब्रांच में स्थानांतरित करता है। Rebase एक ब्रांच के सभी कमिट को एक नए आधार पर ले जाता है। Cherry-pick स्रोत ब्रांच को संशोधित नहीं करता, rebase इतिहास को फिर से लिखता है। Cherry-pick सटीक लेकिन मैनुअल है; rebase स्वचालित लेकिन सार्वजनिक ब्रांचों के लिए खतरनाक है।

सारांश

  • Cherry-pick — परिवर्तनों को संरक्षित करते हुए और नई हैश बनाते हुए ब्रांचों के बीच व्यक्तिगत कमिट स्थानांतरित करने का कमांड।
  • मुख्य परिदृश्य — पूरे इतिहास या अधूरे कोड को स्थानांतरित किए बिना रिलीज़ ब्रांचों के बीच सुधार स्थानांतरित करना।
  • कई कमिट हैश सूचीबद्ध करके या A..B रेंज का उपयोग करके एक कमांड से स्थानांतरित किए जाते हैं।
  • विरोध merge के समान ही हल किए जाते हैं: फ़ाइलें संपादित करें, git add, git cherry-pick --continue।
  • -x फ़्लैग इतिहास पारदर्शिता के लिए संदेश में मूल कमिट का संदर्भ जोड़ता है।
  • पूर्ववत करना पूरा होने से पहले --abort या बाद में git revert के माध्यम से किया जाता है।
  • जोखिम: आश्रित कमिट और बहुत पुराने परिवर्तनों पर cherry-pick लगाने से कई विरोध हो सकते हैं।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें