मैं Git में एक शाखा से दूसरे में एक विशिष्ट प्रतिबद्ध कैसे मिलाऊं?


159

मेरे पास BranchAजो 113 है वह आगे है BranchB

लेकिन मैं केवल अंतिम 10 चाहता हूं या तो BranchAविलय में से आता हूं BranchB

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


जवाबों:


233

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

प्रो Git पुस्तक के अध्याय 5 में यह वर्णन किया गया है कि मैं जितना बेहतर कर सकता हूं , वह चित्र और इस तरह से पूरा करता है। ( रीबासिंग पर अध्याय भी अच्छा पढ़ने वाला है।)

अंत में, चेरी-पिकिंग बनाम मर्जिंग बनाम किसी अन्य एसओ प्रश्न में कुछ अच्छी टिप्पणियां हैं


1
प्रश्न: कहते हैं कि कमिटमेंट Aकी शाखा बंद है masterऔर आप इस पर कुछ काम करते हैं, जिससे बच्चे का निर्माण Bहोता है E। कहते हैं Eकेवल 1 लाइन से जोड़ा गया है D। यदि आप git cherry-pick Eमें master, यह लागू होता है सब से परिवर्तन Aके माध्यम से Eमें masterशाखा है, या यह है केवल से परिवर्तन लागू Dकरने के लिए E, अर्थात्, यह केवल कि 1 लाइन के लिए कहते हैं master? यदि मामला पूर्व का है, तो मैं बाद को कैसे हासिल करूंगा? (मैन्युअल रूप से कॉपी करने और चिपकाने से अलग)
चरवे

7
git cherry-pick -n <प्रतिबद्ध> यदि आप नहीं चाहते कि चेरी पिक-कमिटेड हो।
बेन फ्लिन

6

यदि BranchA को रिमोट से पुश नहीं किया गया है, तो आप कम्यूट का उपयोग करके rebaseफिर से टाइप कर सकते हैं merge। जब संभव हो तो इसका उपयोग mergeकरना बेहतर rebaseहोता है क्योंकि यह डुप्लिकेट कमिट नहीं बनाता है।

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-Maintain-a-Project#Integrating-Contributed-Work

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

यहां छवि विवरण दर्ज करें

यदि आप अपनी ईकाई शाखा में प्रतिबद्ध 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 मान मिलता है, क्योंकि लागू की गई तारीख अलग है। अब आपका इतिहास इस तरह दिखता है:

यहां छवि विवरण दर्ज करें

अब आप अपनी विषय शाखा निकाल सकते हैं और उन कमिटों को छोड़ सकते हैं जिन्हें आप खींचना नहीं चाहते थे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.