2010-03-25 19 views
11

में एक प्रतिबद्धता को बहिष्कृत करता है मेरे पास एक प्रतिबद्धता है, मैंने एक शाखा में संग्रहित किया है, क्योंकि यह केवल एक विशिष्ट बॉक्स में जाना चाहिए।गिट शाखा

मैंने इसे शाखा मास्टर में विलय कर दिया है, लेकिन शाखा देव नहीं, जिसे मैं स्थानीय रूप से उपयोग करता हूं।

अब, गलती से मैंने देव को मास्टर विलय कर दिया और इस देव को देव को पेश किया।

मुझे पता है कि शाखा देव को शाखा को वापस कर सकते हैं; लेकिन चूंकि यह एक प्रतिबद्धता पेश करने जा रहा है जो प्रतिबद्ध करता है (मैं अनुमान लगा रहा हूं, मैंने वास्तव में यह कोशिश नहीं की है), जब मैं मास्टर को विलय करता हूं, तो क्या यह प्रतिबद्धता भी पूर्ववत हो जाएगी?

यदि हां, तो मैं केवल शाखा देव से इस प्रतिबद्धता को पूर्ववत कैसे करूं?

और ओह, git reset HEAD^1 - हार्ड एक विकल्प नहीं है क्योंकि अनिवार्य प्रतिबद्धता के बाद मास्टर पर अन्य काम भी हैं।

यदि दोबारा रीसेट करें और लागू करें तो एकमात्र विकल्प है, तो मैं केवल उन अतिरिक्त प्रतिबद्धताओं को बिना किसी आवश्यक प्रतिबद्धता के अलावा मास्टर से कैसे विलय कर सकता हूं।

अद्यतन:

यहां प्रतिबद्ध पेड़ है। जटिल लग रहा है। मैंने प्रतिबद्धता की ओर इशारा किया है, कि मुझे देव में आवश्यकता नहीं है। (मैंने समझने के लिए धन्यवाद, व्यक्तिगत रूप से पहचाने जाने योग्य जानकारी को भी हटा दिया है। एसिसी कला की तुलना में स्क्रीनशॉट गिटक के लिए यह बहुत आसान है।) alt text

अग्रिम धन्यवाद!

+1

यह ASCII कला को यह रूप में मैं नहीं कर रहा हूँ संभव है पूरी तरह स्पष्ट है कि मर्ज काम अवांछित प्रतिबद्धता के संबंध में है? –

+0

svn में आप संशोधन, 1-19, 4 9, 52-90 की श्रेणियों को मर्ज कर सकते हैं ... मुझे यकीन है कि आप इसे गिट में भी कर सकते हैं। – SeanJA

+1

@ सेनजा: मुझे यकीन नहीं है कि svn के समानता उत्तर का सबसे अच्छा तरीका है। विशेष रूप से, गिट के साथ, यदि आप 'ए - बी - सी' से शुरू करते हैं और 'ए - सी' प्राप्त करने के लिए 'बी' को हटाते हैं, तो प्रतिबद्धता 'सी' प्रतिबद्धता 'सी' के समान नहीं होती है, क्योंकि यह एक ही माता पिता नहीं है। तो निश्चित रूप से, आप वांछित एक गायब के साथ मूल प्रतिबद्धताओं वाली दूसरी शाखा बना सकते हैं, और उसके बाद इसे विलय कर सकते हैं, लेकिन आप मूल शाखा को विलय नहीं कर पाएंगे। – Cascabel

उत्तर

16

आपकी शाखा की एक स्क्रैच प्रति पर, git rebase --interactive और अवांछित प्रतिबद्धता छोड़ दें। वैकल्पिक रूप से, आप अवांछित प्रतिबद्धता की एक नई शाखा अपस्ट्रीम और git cherry-pick वांछित काम कर सकते हैं।

इसे प्राप्त करने के लिए शायद अधिक तरीके हैं।

2

गिट रीफ्लॉग, फिर गिट रीसेट - अपने दोस्तों को गलतियों को पूर्ववत करने के लिए हैं।

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

  • ग्रहण: सिर शाखा बी से मर्ज करें।
  • प्रतिबद्ध की revid पहचानें से परहेज किया (R0)
  • सिर्फ R0 से पहले प्रतिबद्ध के revid पहचानें (आर 1)

    git merge <R1> 
    git merge -s ours R0 
    git merge B 
    
संबंधित मुद्दे