जवाबों:
Git में चेरी पिकिंग का अर्थ है एक शाखा से एक कमिट चुनना और दूसरे पर लागू करना।
यह अन्य तरीकों से विपरीत है, जैसे कि merge
और rebase
जो आम तौर पर किसी अन्य शाखा पर कई तरीके लागू करते हैं।
सुनिश्चित करें कि आप उस शाखा पर हैं जिसे आप कमिट लागू करना चाहते हैं।
git checkout master
निम्नलिखित को निष्पादित करें:
git cherry-pick <commit-hash>
ध्यान दें:
यदि आप किसी सार्वजनिक शाखा से चेरी-पिक करते हैं, तो आपको उपयोग करने पर विचार करना चाहिए
git cherry-pick -x <commit-hash>
यह एक मानकीकृत प्रतिबद्ध संदेश उत्पन्न करेगा। इस तरह, आप (और आपके सहकर्मी) अभी भी प्रतिबद्ध की उत्पत्ति पर नज़र रख सकते हैं और भविष्य में विलय के संघर्ष से बच सकते हैं।
यदि आपके पास प्रतिबद्ध से जुड़े नोट हैं तो वे चेरी-पिक का पालन नहीं करते हैं। साथ ही उन्हें लाने के लिए, आपको उपयोग करना होगा:
git notes copy <from> <to>
अतिरिक्त लिंक:
git cherry-pick -x <commit-hash>
। यह एक मानकीकृत प्रतिबद्ध संदेश उत्पन्न करेगा। इस तरह, आप (और आपके सह-कार्यकर्ता) अभी भी प्रतिबद्ध की उत्पत्ति पर नज़र रख सकते हैं और भविष्य में विलय के संघर्ष से बच सकते हैं।
git notes copy <from> <to>
उन्हें भी लाने के लिए उपयोग करना होगा।
"cherry-pick commit applies the changes introduced by the named commit on the current branch"
अधिकांश ppl परिवर्तन के रूप में प्रतिबद्ध होने के बारे में सोचते हैं (जैसे कि svn iirc था), लेकिन ऐसा नहीं है, प्रत्येक कमिट पूरे काम करने वाले पेड़ को संदर्भित करता है। हालांकि इससे इस मामले में कोई फर्क नहीं पड़ता है, यह समझने में मदद कर सकता है कि git क्यों काम करता है जैसे यह करता है।
इस उद्धरण से लिया गया है; Git के साथ संस्करण नियंत्रण (वास्तव में महान पुस्तक, अगर आप git में रुचि रखते हैं तो मैं आपको इसे खरीदने के लिए प्रोत्साहित करता हूं)
संपादित करें: चूंकि यह उत्तर अभी भी प्रभावित हो रहा है, इसलिए मैं इसके बारे में एक्शन वीडियो ट्यूटोरियल में बहुत अच्छा जोड़ना चाहूंगा:
Youtube: Git चेरी-पिक का परिचय
Git चेरी-पिक का उपयोग करना कमांड git चेरी-पिक कमिट वर्तमान शाखा पर नामित कमिट द्वारा शुरू किए गए परिवर्तनों को लागू करता है। यह एक नई, विशिष्ट प्रतिबद्धता का परिचय देगा। सख्ती से बोलना, git चेरी-पिक का उपयोग करना एक रिपॉजिटरी के भीतर मौजूदा इतिहास को नहीं बदलता है; इसके बजाय, यह इतिहास में जोड़ता है। अन्य गिट ऑपरेशनों के साथ, जो एक अंतर को लागू करने की प्रक्रिया के माध्यम से परिवर्तनों को पेश करते हैं, आपको दिए गए प्रतिबद्ध से परिवर्तनों को पूरी तरह से लागू करने के लिए संघर्षों को हल करने की आवश्यकता हो सकती है । कमांड git चेरी-पिक का उपयोग आम तौर पर एक शाखा से एक विशेष शाखा के भीतर एक विशेष शाखा में एक विशेष शाखा से करने के लिए किया जाता है। एक सामान्य उपयोग एक रखरखाव शाखा से एक विकास शाखा तक अग्रेषित करने के लिए- या बैक-पोर्ट है।
$ git checkout rel_2.3
$ git cherry-pick dev~2 # commit F, above
इससे पहले:
उपरांत:
Git में चेरी पिकिंग को एक शाखा से दूसरी शाखा में कुछ प्रतिबद्ध लागू करने के लिए डिज़ाइन किया गया है। यह किया जा सकता है यदि आप उदाहरण के लिए। एक गलती की और गलत शाखा में बदलाव किया, लेकिन पूरी शाखा का विलय नहीं करना चाहता। आप सिर्फ उदाहरण के लिए कर सकते हैं। कमिट वापस करें और चेरी को दूसरी शाखा पर ले जाएं।
इसका उपयोग करने के लिए, आपको बस आवश्यकता है git cherry-pick hash
, जहां hash
दूसरी शाखा से एक प्रतिबद्ध हैश है।
पूरी प्रक्रिया के लिए देखें: http://technosophos.com/2009/12/04/git-cherry-picking-move-small-code-patches-across-branches.html
स्थिति का संक्षिप्त उदाहरण, जब आपको चेरी लेने की आवश्यकता होती है
निम्नलिखित परिदृश्य पर विचार करें। आपकी दो शाखाएँ हैं।
a) रिलीज़ 1 - यह शाखा आपके ग्राहक के पास जा रही है, लेकिन अभी भी कुछ कीड़े तय होने बाकी हैं।
बी) मास्टर - क्लासिक मास्टर शाखा, जहां आप उदाहरण के लिए रिलीज़ 2 के लिए कार्यक्षमता जोड़ सकते हैं।
अब : आप कुछ को जारी 1 में ठीक करते हैं । बेशक आपको यह फिक्स मास्टर में भी चाहिए । और यह चेरी चुनने के लिए एक विशिष्ट उपयोग-मामला है। तो इस परिदृश्य में चेरी पिक का मतलब है कि आप रिलीज़ 1 शाखा से एक कमिट लेते हैं और इसे मास्टर शाखा में शामिल करते हैं ।
चेरी-पिक एक Git फीचर है। यदि कोई एक शाखा में एक लक्ष्य शाखा के लिए विशिष्ट प्रतिबद्ध करना चाहता है, तो चेरी-पिक का उपयोग किया जाता है।
git चेरी-पिक चरण नीचे दिए गए हैं।
git cherry-pick <commit id>
यहाँ प्रतिबद्ध आईडी एक और शाखा की गतिविधि आईडी है।
git cherry-pick 9772dd546a3609b06f84b680340fb84c5463264f
मैंने चरण-दर-चरण चित्रण तैयार किया कि चेरी-पिक क्या करती है - और इन चित्रों का एक एनीमेशन (अंत के पास)।
ध्यान दें:
प्रतिबद्ध L'
है (प्रतिबद्ध = स्नैपशॉट) को देखने के उपयोगकर्ता के बिंदु से प्रतिबद्ध की सटीक प्रतिलिपि L
।
तकनीकी रूप से (आंतरिक रूप से), यह एक नई, अलग-अलग प्रतिबद्धता है (क्योंकि उदाहरण के लिए L
एक पॉइंटर होता है K
(जैसे उसके माता-पिता), जबकि L'
एक पॉइंटर होता है E
)।
आप सोच सकते हैं कि एक चेरी एक रिबास के समान है, या इसके बजाय इसे रिबेज की तरह प्रबंधित किया जाता है। इसके द्वारा, मेरा मतलब है कि यह एक मौजूदा प्रतिबद्धता लेता है और इसे लेने के लिए पुनर्जन्म करता है, शुरुआती बिंदु के रूप में, वर्तमान में आप जिस शाखा के प्रमुख हैं।
A rebase
एक ऐसा कमिटमेंट लेता है जिसमें एक पैरेंट X था और कमिट को फिर से बनाता है जैसे कि वास्तव में उसके पास एक Y था, और यह वास्तव में क्या cherry-pick
करता है।
चेरी पिक इस बारे में अधिक है कि आप कमिट का चयन कैसे करते हैं। साथ pull
(रिबेस), Git परोक्ष क्या अपनी शाखा को खींच लिया है के शीर्ष पर अपने स्थानीय प्रतिबद्ध पुन: बनाता है, लेकिन साथ cherry-pick
आप स्पष्ट रूप से कुछ के लिए प्रतिबद्ध (रों) चुनते हैं, और परोक्ष अपने वर्तमान शाखा के शीर्ष पर (उन्हें) को पुनर्जीवित।
तो जिस तरह से आप इसे करते हैं वह अलग है, लेकिन हुड के तहत वे बहुत समान संचालन हैं - कमिटेशन का उत्थान।
cherry-pick
जब लक्ष्य शाखा को बाद में स्रोत शाखा में वापस विलय कर दिया जाता है तो यह व्यवहार क्यों करता है। धन्यवाद महोदय।
यह कॉपी की तरह है (कहीं से) और पेस्ट (कहीं से), लेकिन विशिष्ट कमिट के लिए।
यदि आप उदाहरण के लिए, एक हॉट फ़िक्स करना चाहते हैं, तो आप cherry-pick
सुविधा का उपयोग कर सकते हैं ।
cherry-pick
एक विकास शाखा में अपना काम करें , और merge
वह एक रिलीज शाखा के लिए प्रतिबद्ध है। इसी तरह, cherry-pick
रिलीज ब्रांच से लेकर मास्टर तक करें। देखा
जब आप किसी प्रोजेक्ट पर डेवलपर्स की टीम के साथ काम कर रहे होते हैं, तो कई प्रकार की गिट शाखाओं के बीच बदलाव का प्रबंधन एक जटिल कार्य बन सकता है। कभी-कभी आप एक पूरी शाखा को दूसरे में विलय नहीं करना चाहते हैं, और केवल एक या दो विशिष्ट कमिट चुनने की आवश्यकता होती है। इस प्रक्रिया को 'चेरी पिकिंग' कहा जाता है।
चेरी पिकिंग पर एक शानदार लेख मिला, इसे गहराई से जानकारी के लिए देखें: https://www.prepretnext.com.au/blog/intro-cherry-picking-git
यदि आप बिना प्रतिबद्ध आईडी के विलय करना चाहते हैं तो आप इस कमांड का उपयोग कर सकते हैं
git cherry-pick master~2 master~0
उपरोक्त आदेश 1 से 3 तक मास्टर के अंतिम तीन कमिट्स को मर्ज करेगा
यदि आप सिंगल कमिट के लिए ऐसा करना चाहते हैं तो अंतिम विकल्प को हटा दें
git cherry-pick master~2
इस तरह आप मास्टर के अंत से 3 वें प्रतिबद्ध का विलय करेंगे।
यह आपकी वर्तमान शाखा के लिए एक विशेष प्रतिबद्ध लागू करेगा।
इसका मतलब है की :
Ex: प्रतिबद्ध एक पर विचार करें
added newFileA
modified main:
+ import './newFileA'
कमिट बी
added newFileB
modified main:
+ import './newFileB'
यदि आप किसी अन्य शाखा में बी- कॉर्ट करते हैं, तो आप इसके साथ समाप्त होंगे:
/newFileB
/main :
import './newFileA'
import './newFileB'
चूंकि बी में न्यूफ़िलेब और मुख्य शामिल हैं , लेकिन कोई नया फ़ील नहीं है , जिसके परिणामस्वरूप बग है, इसलिए सावधानी के साथ उपयोग करें।
आधिकारिक डॉक्स से उद्धरण:
एक या अधिक मौजूदा कमिट्स को देखते हुए, हर एक के लिए एक नया कमिटमेंट दर्ज करते हुए, एक-एक बदलाव को लागू करें। इसके लिए आपके वर्किंग ट्री को साफ होना चाहिए (HEAD कमिट से कोई संशोधन नहीं)।
जब यह स्पष्ट नहीं होता कि परिवर्तन कैसे लागू किया जाए, तो निम्नलिखित होता है:
वर्तमान शाखा और HEAD पॉइंटर सफलतापूर्वक बने अंतिम प्रतिबद्ध पर बने रहते हैं।
CHERRY_PICK_HEAD रेफरी उस बिंदु पर इंगित करने के लिए सेट किया गया है जिसने परिवर्तन लागू किया है जो लागू करना मुश्किल है।
वे पथ जिनमें परिवर्तन लागू किए गए हैं, दोनों को अनुक्रमणिका फ़ाइल और आपके कार्यशील ट्री में अपडेट किया गया है।
परस्पर विरोधी रास्तों के लिए, अनुक्रमणिका फ़ाइल तीन संस्करणों तक रिकॉर्ड करती है, जैसा कि गिट-मर्ज के "TRUE MERGE" अनुभाग में वर्णित है। कार्यशील ट्री फ़ाइलों में सामान्य संघर्ष मार्करों <<<<<<<< और >>>>>>> द्वारा ब्रैकेट किए गए संघर्ष का विवरण शामिल होगा।
कोई अन्य संशोधन नहीं किया जाता है।