2012-05-25 27 views
9

मेरे पास कई फीचर शाखाएं और मास्टर शाखा है। फ़ीचर 2 किया जाता है। आम तौर पर मैं रिबेज (रिमोट एसवीएन रेपो के साथ काम करना चाहता हूं और इतिहास रखना चाहता हूं, इसलिए कोई नियमित विलय नहीं) और एफएफ-विलय। लेकिन चूंकि मैंने ब्रांच किया है, इसलिए मास्टर बदल नहीं गया है, इसलिए मैं मास्टर हेड (E पर) G पर ले जाना चाहता हूं। git branch -f master G का उपयोग करने से कोई भी दृश्य परिवर्तन नहीं होता है, मुझे लगता है कि ऐसा इसलिए है क्योंकि G एक अलग शाखा पर है।मास्टर हेड को शाखा में ले जाना

क्या इसके बजाय यहां git update-ref -f master G का उपयोग करना सुरक्षित है? क्या मुझे रीबेस/एफएफ-मर्ज के साथ रहना चाहिए? कुछ और भी बेहतर है?

feature1  C-D 
      /
master A-B-E    
       \      
feature2  F-G 

धन्यवाद।

+1

क्या में 'G' की एक नियमित तेजी से आगे मर्ज के साथ गलत क्या है' master'? पुनर्जीवित करने की कोई ज़रूरत नहीं है। आप इतिहास रखेंगे, और आपको एक सीधा ग्राफ मिलेगा ('ए-बी-ई-एफ-जी')। – ellotheth

+0

आह, इसकी स्पष्टता! ग्राफ बिल्कुल रीबेस के बाद दिखता है। मुझे आश्चर्य है कि मैंने कभी और क्यों सोचा था। उत्तर के रूप में repost करने के लिए देखभाल? – kostja

+0

शाखा सुविधा 2 में पहले से ही 'सीधा ग्राफ' है - बस मास्टर 2 के लिए फीचर 2 का नाम बदलें (या फीचर 2 पर मास्टर को ले जाएं)! – GoZoner

उत्तर

5

मास्टर चाल करना होगा में जी का एक नियमित मर्ज, rebase करने की कोई जरूरत:

feature1  C-D 
       /
    master A-B-E    
        \      
    feature2  F-G 

git checkout master 
git merge feature2 

    feature1    C-D 
         /
    master, feature2 A-B-E-F-G 
0

यदि आपने मास्टर शाखा में चेक आउट किया है तो git merge --no-ff feature2 का उपयोग कर मास्टर में फीचर 2 की गैर फास्ट फॉरवर्ड विलय करने के लिए सबसे अच्छा हो सकता है। आपको निम्नलिखित

feature1  C-D 
      /
master A-B-E-----H   
       \ /     
feature2  F-G 
+0

मैं इतिहास में रखने के लिए जहां संभव हो मास्टर पर नियमित विलय से बचना चाहता हूं, मैंने सवाल में ऐसा कहा। और, आपको क्यों लगता है कि नो-एफएफ-मर्ज रेफ मूव से बेहतर है? – kostja

11

आपको शाखाओं को मर्ज करने की आवश्यकता नहीं है, एक रीसेट पर्याप्त है। मान लीजिए मास्टर की जांच की गई है:

git reset --hard feature2 
+2

एक रीसेट कार्यात्मक रूप से इस मामले में एक फास्ट-फॉरवर्ड विलय के बराबर है। – ellotheth

+1

विज्ञापन के रूप में काम करता है, धन्यवाद मैग्नस। उत्तर के लिए खोज के पांच मिनट के बाद – kostja

+0

, मैं इसे आज़माता हूं और यह काम करता है। सरल, और प्रतिबिंब में उम्मीद है। धन्यवाद! –

1

अपडेट-रेफ सुरक्षित है। एक शाखा सिर थोड़ा "मुझे पढ़ो" से ज्यादा कुछ नहीं है! टैग एक प्रतिबद्धता पर लटका दिया। यह पूरी तरह से सम्मेलन से है कि गिट इसे उठाता है और कभी-कभी आपके लिए एक अलग प्रतिबद्धता पर लटकता है।

का उपयोग Git शाखा -f गुरु जी कोई दृश्य परिवर्तन

git log --decorate --oneline --all क्या कहता है में परिणाम नहीं करता है? git show master?

+0

मेरा बुरा, मैंने 'गिट शाखा मास्टर SHA' के लिए गलत SHA दर्ज किया। यह काम किया। – kostja

6

कोई विलय आवश्यक नहीं - बस शाखाओं का नाम बदलें। चूंकि आपको फीचर 2 ('किया गया है) की परवाह नहीं है और न ही मौजूदा मास्टर (' ई 'पर) आपको बस निम्नलिखित की आवश्यकता है।

git branch -d master 
git branch -m feature2 master 

सरल बेहतर है?

याद रखें दो महत्वपूर्ण अवधारणाओं को शामिल कर रहे हैं:

  1. Git प्रतिबद्ध ग्राफ, और
  2. Git का संदर्भ

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

तो, आपके मामले में, संरचना में कोई आवश्यक परिवर्तन नहीं है, केवल संदर्भों में बदलाव।

एक एक लाइन संस्करण है:

git branch -f master feature2 

जो feature2 शाखा के आसपास (पूर्व दो लाइनर जो feature2 अक्ष के विपरीत) रहता है।

+1

धन्यवाद, गोज़ोनर। अच्छा विकल्प मैंने सोचा नहीं है। लेकिन मुझे लगता है कि मैं अपने मामले में एफएफ-विलय करने के लिए चिपक रहा हूँ। – kostja

+0

संपादन में अतिरिक्त विवरण देखें। – GoZoner

+0

स्थानीय रूप से काम करता प्रतीत होता है। लेकिन मैं रिमोट सर्वर में परिवर्तन कैसे धक्का दूं? यह एक गैर-फास्ट-फॉरवर्ड विलय की शिकायत करता है – josinalvo

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

  • कोई संबंधित समस्या नहीं^_^