2013-08-27 12 views
25

पृष्ठभूमि: मैंने हाल ही में master में एक बड़ी विषय शाखा विलय कर दी है। कुछ दिनों बाद मैंने पाया कि इस विषय शाखा में बग शामिल हैं। तो मैं git revert -m 1 <merge-commit> इसे संपादित करें।रिवर्ट विलय वाली शाखा

समस्या: अब मैं विषय शाखा की जाँच और वर्तमान master के खिलाफ यह rebase ताकि मैं 1 कर सकते हैं) कीड़े को ठीक करने और 2) (फिर) गुरु के साथ तय विषय शाखा विलय करना चाहते हैं। नई शाखा का निर्माण, fixedtopic आसान हिस्सा है, लेकिन हर बार जब मैं

git checkout fixedtopic 
git rebase master 

Git फैसला करता है कि यह पुरानी प्रतिबद्ध पुनः चलाने के लिए, क्योंकि वे पहले से ही master में विलय कर रहे हैं के लिए तैयार नहीं है है। इसके बजाय यह बस एक फास्ट-फॉरवर्ड रीबेस करता है।

प्रश्न: कैसे rebase का उपयोग कर fixedtopic पर प्रतिबद्ध की पुनरावृत्ति के लिए मजबूर कर सकते हैं? क्या मैं? मैं cherry-pick का उपयोग नहीं करना चाहूंगा क्योंकि यह थोड़ा अधिक बोझिल है।

अतिरिक्त:

  • git reset ing मर्ज यह नहीं करने के लिए एक विकल्प है, क्योंकि मैं मास्टर नदी के ऊपर धकेल दिया।
  • मैं master से नई शाखा नहीं बनाऊंगा और अपना रिवर्ट वापस कर दूंगा। इसका कारण यह है कि मैं इंटरैक्टिव रिबेस का उपयोग कर कुछ विषय शाखा के इतिहास को फिर से लिखना चाहता हूं।
  • यहां परिदृश्य का एक जिथब गिस्ट है: https://gist.github.com/JensRantil/6352495 ध्यान दें कि मुझे e8df5ec और ee16464 master (या master पर आधारित शाखा) पर लागू किया गया है।
+2

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

उत्तर

9

यह प्राप्त करने का एक तरीका है विषय शाखा को अंतःक्रियात्मक रूप से पुनर्जीवित करना और मास्टर से बाहर होने के बाद पहली प्रतिबद्धता को पुन: प्रस्तुत करना (उदाहरण के लिए git rebase -i HEAD~10 यदि आपके पास शाखा में 10 कार्य हैं)। यह विषय शाखा के अंदर सभी कामों के शा को फिर से लिख देगा। इसलिए आप git rebase master के साथ सामान्य तरीके से रीबेज करने में सक्षम होंगे।

+1

स्पष्टीकरण में सहायता के लिए: "पहली प्रतिबद्धता का पुनरावृत्ति" का अर्थ है प्रतिबद्ध * संदेश * – jdunk

+0

आप --no- एफएफ विकल्प, यह वही काम करता है। – theannouncer

+1

यह (अब नहीं?) काम करता है। – Flimzy

1

आपको गिट फॉर्म को अपने आप पर उचित अनमोल काम निर्धारित करने की कोशिश करने के लिए --onto का उपयोग करने की आवश्यकता है।

उदा। (विषय शाखा के साथ की जाँच की):

git rebase --onto master <id-of-branch-point> 

<id-of-branch-point> के लिए आप अपने विषय शाखा के git merge-base चाहते हैं और मास्टर पर मर्ज है कि आप को वापस लाया गया प्रतिबद्ध से पहले।

संपादित

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

+0

चार्ल्स, आपके उत्तर के लिए धन्यवाद। मैं अभी भी यह काम '--onto' के साथ भी नहीं प्राप्त कर सकता हूं। मैंने अपने प्रश्न को एक जिथब गिस्ट के साथ अपडेट किया है जिसमें मैं जिस स्थिति में हूं, उसका एक उदाहरण उदाहरण है। – Ztyx

0

एक नई शाखा की जांच करने के लिए सबसे अच्छा काम करना प्रतीत होता है, और फिर पिछली कार्य शाखा को वापस लौटकर पुनः स्थापित करें।

मैंने जो कुछ भी किया है वह अत्यधिक जटिल है और/या काम नहीं करता है।

9

प्रलेखन (गिट सहायता रिबेस) सुझाव देता है कि "गिट रिबेस - फोर्स-रीबेस" बस यह करता है - लेकिन (गिट 1.9.1) यह नहीं करता है। प्रलेखन भी बताता है कि "गिट रिबेस -आई-नो-एफएफ" उस कमांड के बराबर है - लेकिन यह नहीं है: काम करता है।

अपने सार, आदेश क्लोन करने के बाद:

git checkout topic 
    git rebase -i --no-ff --onto master 7b3af topic 

वांछित परिणाम उपज, "तीसरा" और "चौथा" के नए संस्करण के साथ मास्टर की चोटी पर करता है, और topic के नए संस्करण पर इशारा करते हुए "चौथा"। दूसरे आदेश में, SHA 7b3af "दूसरा" प्रतिबद्धता है, वह बिंदु जहां topic से ब्रांच किया गया था।

+1

विज्ञापन के रूप में '--force-rebase' काम क्यों नहीं करता है ?! –

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