git - गिट में एक विशिष्ट प्रतिबद्धता कैसे विलय करें




merge (2)

' git cherry-pick ' आपका जवाब यहां होना चाहिए।

मौजूदा प्रतिबद्धता द्वारा पेश किए गए परिवर्तन को लागू करें।

इस पोस्ट में चेरी-पिकिंग के परिणाम के बारे में bdonlan के जवाब को पढ़ने के लिए मत भूलना:
"एक शाखा से सभी काम करता है, निर्दिष्ट धक्का दूसरे को प्रतिबद्ध करता है" , जहां:

A-----B------C
 \
  \
   D

हो जाता है:

A-----B------C
 \
  \
   D-----C'

इस बात की समस्या यह है कि गिट विचार उनके सामने सभी इतिहास शामिल करने के लिए प्रतिबद्ध है

जहां सी 'की एक अलग SHA-1 आईडी है।
इसी प्रकार, चेरी एक शाखा से दूसरे में एक प्रतिबद्धता लेने के लिए मूल रूप से एक पैच उत्पन्न करना, फिर इसे लागू करना, इस तरह इतिहास को खोना भी शामिल है।

प्रतिबद्ध आईडी के इस परिवर्तन से अन्य चीजों के बीच गिट की विलय कार्यक्षमता टूट जाती है (हालांकि यदि कम से कम उपयोग किया जाता है तो ह्यूरिस्टिक्स होता है जो इस पर पेपर करेगा)।
अधिक महत्वपूर्ण बात यह है कि, यह कार्यात्मक निर्भरताओं को अनदेखा करता है - यदि सी वास्तव में बी में परिभाषित एक फ़ंक्शन का उपयोग करता है, तो आप कभी नहीं जानते

मैंने गिटहब में एक भंडार से एक शाखा को फोर्क किया है और मेरे लिए कुछ विशिष्ट किया है। अब मुझे पता चला कि मूल भंडार में एक अच्छी सुविधा थी जो HEAD पर थी।

मैं इसे केवल पिछली प्रतिबद्धताओं के बिना विलय करना चाहता हूं। मुझे क्या करना चाहिए? मुझे पता है कि सभी कामों को कैसे मर्ज करें:

git branch -b a-good-feature
git pull repository master
git checkout master
git merge a-good-feature
git commit -a
git push

आइए एक उदाहरण लेने और समझने की कोशिश करें:

मेरे पास एक शाखा है, मास्टर कहें, एक्स <प्रतिबद्ध-आईडी> पर इंगित करें, और मेरे पास वाई <sha1> को इंगित करने वाली एक नई शाखा है।

जहां वाई <प्रतिबद्ध-आईडी> = <मास्टर> शाखा प्रतिबद्ध होती है - कुछ काम करता है

अब वाई शाखा के लिए कहें, मुझे मास्टर शाखा और नई शाखा के बीच काम करना पड़ता है। नीचे वह प्रक्रिया है जिसका हम अनुसरण कर सकते हैं:

चरण 1:

git checkout -b local origin/new

जहां स्थानीय शाखा का नाम है। कोई नाम दिया जा सकता है।

चरण 2:

  git merge origin/master --no-ff --stat -v --log=300

मास्टर शाखा से नई शाखा में कामों को मर्ज करें और अधिकांश <n> वास्तविक प्रतिबद्धताओं से विलय किए जा रहे हैं, जिनमें से एक पंक्ति विवरण के साथ लॉग संदेश का विलय प्रतिबद्धता भी बनाएं।

गिट मर्ज के बारे में अधिक जानकारी और पैरामीटर के लिए, कृपया देखें:

git merge --help

इसके अलावा यदि आपको एक विशिष्ट प्रतिबद्धता को मर्ज करने की आवश्यकता है, तो आप इसका उपयोग कर सकते हैं:

git cherry-pick <commit-id>




merge