2011-06-16 16 views
127

मेरे पास BranchA है जो BranchB से 113 है।मैं गिट में एक शाखा से दूसरे शाखा में एक विशिष्ट प्रतिबद्धता कैसे विलय करूं?

लेकिन मुझे केवल अंतिम 10 या BranchA से BranchB में विलय करना है।

क्या ऐसा करने का कोई तरीका है?

+6

के संभावित डुप्लिकेट [कैसे मर्ज करने के लिए एक विशिष्ट में करते हैं। गिट] (http://stackoverflow.com/questions/881092/how-to-merge-a- विशिष्ट-commit-in-git) – chharvey

उत्तर

194

git cherry-pick <commit> कमांड आपको एक ही प्रतिबद्धता (जो भी शाखा से) लेने की अनुमति देता है और, अनिवार्य रूप से, इसे अपनी कार्यरत शाखा में पुन: प्राप्त करें।

Chapter 5 of the Pro Git book explains it better than I can, आरेखों और इस तरह के साथ पूर्ण; "रीबेजिंग और चेरी पिकिंग वर्कफ़्लोज़" नामक अनुभाग की तलाश करें। (The chapter on Rebasing भी अच्छी पढ़ाई है।)

आखिरकार, कुछ good comments on the cherry-picking vs merging vs rebasing in another SO question हैं।

+0

प्रश्न: प्रतिबद्ध करें 'ए' को' मास्टर 'से ब्रांच किया गया है और आप इस पर कुछ काम करते हैं, जिससे बच्चा 'ई' के माध्यम से' बी 'बना देता है। कहें 'ई' में केवल' 1' 'से जोड़ा गया है। यदि आप 'मास्टर' में ई-चेरी चुनते हैं, तो क्या यह 'ए' से 'ई' के माध्यम से' मास्टर 'शाखा में * सभी * परिवर्तनों को लागू करता है, या यह * केवल *' D' से परिवर्तन लागू करता है 'ई' के लिए, अर्थात्, यह केवल 1 लाइन को 'मास्टर' में जोड़ता है? यदि मामला पूर्व है, तो मैं बाद वाले को कैसे प्राप्त करूं? (मैन्युअल रूप से प्रतिलिपि बनाने और पेस्ट करने के अलावा) – chharvey

+4

गिट चेरी-पिक-एन यदि आप नहीं चाहते हैं कि चेरी ऑटो-प्रतिबद्ध हो। –

7

आप वांछित प्रतिबद्धताओं को चुन सकते हैं।

मैंने पाया इस How to cherry-pick multiple commits

मैं स्वीकार किए जाते हैं जवाब करना होगा।

+1

क्या आप विवरण जोड़ सकते हैं? मैं उस शब्दावली से परिचित नहीं हूं – NullVoxPopuli

+0

@ टेलिंडीशॉप मैं उन्हें ढूंढ रहा हूं – hvgotcodes

+0

@ टेलिंडीशॉप आप बस क्यों नहीं आ रहे हैं? – hvgotcodes

5

यदि शाखा ए को रिमोट पर धक्का नहीं दिया गया है तो आप rebase और फिर बस merge का उपयोग करके काम को फिर से व्यवस्थित कर सकते हैं। mergerebase से अधिक संभव होने पर उपयोग करना बेहतर है क्योंकि यह डुप्लिकेट काम नहीं करता है।

git checkout BranchA 
git rebase -i HEAD~113 
... reorder the commits so the 10 you want are first ... 
git checkout BranchB 
git merge [the 10th commit] 
2

स्रोत: https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work

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

enter image description here

आप अपने गुरु शाखा में e43a6 प्रतिबद्ध खींचने के लिए चाहते हैं, आप चला सकते हैं

$ git cherry-pick e43a6 
Finished one cherry-pick. 
[master]: created a0a41a9: "More friendly message when locking the index fails." 
3 files changed, 17 insertions(+), 3 deletions(-) 

यह वही परिवर्तन किया खींचती है: उदाहरण के लिए, आप एक परियोजना है कि इस तरह दिखता है लगता है e43a6 में, लेकिन आपको एक नया प्रतिबद्ध SHA-1 मान मिलता है, क्योंकि लागू तिथि अलग है। अपने इतिहास इस तरह दिखता है:

enter image description here

अब आप अपने विषय शाखा को हटाने और प्रतिबद्ध आप में खींचने के लिए नहीं करना चाहता था ड्रॉप कर सकते हैं

संबंधित मुद्दे