मेरे पास BranchA
जो 113 है वह आगे है BranchB
।
लेकिन मैं केवल अंतिम 10 चाहता हूं या तो BranchA
विलय में से आता हूं BranchB
।
क्या इसे करने का कोई तरीका है?
मेरे पास BranchA
जो 113 है वह आगे है BranchB
।
लेकिन मैं केवल अंतिम 10 चाहता हूं या तो BranchA
विलय में से आता हूं BranchB
।
क्या इसे करने का कोई तरीका है?
जवाबों:
git cherry-pick <commit>
आदेश आप एक ही (जो भी शाखा से) के लिए प्रतिबद्ध है और अनिवार्य रूप से, अपने काम शाखा में यह rebase लेने के लिए अनुमति देता है।
प्रो Git पुस्तक के अध्याय 5 में यह वर्णन किया गया है कि मैं जितना बेहतर कर सकता हूं , वह चित्र और इस तरह से पूरा करता है। ( रीबासिंग पर अध्याय भी अच्छा पढ़ने वाला है।)
अंत में, चेरी-पिकिंग बनाम मर्जिंग बनाम किसी अन्य एसओ प्रश्न में कुछ अच्छी टिप्पणियां हैं ।
A
की शाखा बंद है master
और आप इस पर कुछ काम करते हैं, जिससे बच्चे का निर्माण B
होता है E
। कहते हैं E
केवल 1 लाइन से जोड़ा गया है D
। यदि आप git cherry-pick E
में master
, यह लागू होता है सब से परिवर्तन A
के माध्यम से E
में master
शाखा है, या यह है केवल से परिवर्तन लागू D
करने के लिए E
, अर्थात्, यह केवल कि 1 लाइन के लिए कहते हैं master
? यदि मामला पूर्व का है, तो मैं बाद को कैसे हासिल करूंगा? (मैन्युअल रूप से कॉपी करने और चिपकाने से अलग)
यदि 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]
स्रोत: 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 मान मिलता है, क्योंकि लागू की गई तारीख अलग है। अब आपका इतिहास इस तरह दिखता है:
अब आप अपनी विषय शाखा निकाल सकते हैं और उन कमिटों को छोड़ सकते हैं जिन्हें आप खींचना नहीं चाहते थे।