2011-01-05 16 views
13

क्या किसी अन्य (मास्टर या अन्य) से जानकारी के साथ एक साइड शाखा अपडेट करने का कोई तरीका है, और फिर दो जारी हैं? एक रिबेस की तरह, लेकिन पुराने डेटा को वहाँ रखते हुए?गिट विलय और अलग रखें?

मूल:

A---B---C---G---H master 
    \   
     D---E---F branchA 

परिणाम: सी, जी, और एच, (कमिट जम्मू मर्ज है) ऐसी है कि कश्मीर के लिए प्रतिबद्ध अब भी है करता है से

A---B---C---G---H---L master 
    \   \ 
     D---E---F---J---K branchA 

इस तरह की है कि branchA जानकारी हो जाता है एक साइड शाखा (और भावी प्रतिबद्धता एल अभी भी मास्टर पर है), लेकिन मास्टर से अद्यतन जानकारी है?

मैं नहीं है एक रिबेस करना है, क्योंकि उस के साथ खत्म हो जाएगा चाहते हैं:

A---B---C---G---H---L master 
       \ 
        D'---E'---F'---K branchA 

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

बिंदु यह है कि मैं अतीत में उस फ़ोल्डर का नाम बदलना चाहता हूं (सी और ई) और इसे आगे लाने से रोकना चाहता हूं। क्या यह समझ में आता है? क्या मैं इस पिछड़े को देख रहा हूँ? या जब तक शाखा विलय नहीं हो जाती है, तो क्या मुझे सिर्फ गंदे rebase "नाम, नाम बदलें" चाल से निपटना चाहिए?

+1

गिट विलय सबसे सरल जवाब है; मैं इसे दो शाखाओं को एक साथ विलय कर रहा था, और दोनों अलग-अलग जारी रखने में असमर्थ था ... लेकिन अब यह नहीं हो रहा है! – MidnightLightning

+0

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

उत्तर

14

अपने इतिहास एच या मास्टर और एफ branchA पर (है कि, जम्मू और कश्मीर अभी तक अस्तित्व में नहीं है), तो हाँ, बस बाहर शाखा एक की जाँच करें और विलय पर एल अप करने के लिए चला जाता है:

git checkout branchA 
git merge H # Use H's commit identifier if it's not the tip of master 

यह शाखाओं में परिवर्तनों को विलय करेगा और मास्टर शाखा को परेशान नहीं करेगा।

आप पहले से ही कश्मीर प्रतिबद्ध बनाया है और आप इसे और एफ के बीच किसी मर्ज सम्मिलित करना चाहते हैं, तो थोड़ा अधिक काम है करने के लिए:

git checkout -b temp F # Create a new branch at commit F 
git merge H    # Merge from commit H into the new branch 
git cherry-pick K  # Apply the K commit to the merged commit 

# And the rest simply replaces the temp branch with branchA 
git checkout branchA 
git reset --hard temp 
git branch -d temp 

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

1

एक साधारण git merge masterbranchA क्या करना चाहिए पर (या git merge H जहां H है एच के लिए प्रतिबद्ध-रेफरी अगर H नवीनतम मास्टर पर नहीं है)।

यदि C और E दोनों को उसी फ़ोल्डर का नाम बदलना होगा जो आपको हल करना होगा, लेकिन इसके अलावा, आपको ठीक होना चाहिए।

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