2009-11-20 13 views
21

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

उत्तर

27

चेरी-पिक प्रतिबद्ध शाखा को लक्षित करने और स्रोत शाखा को रीसेट करने के लिए प्रतिबद्ध है। मान लिया जाये कि, है न ले जाने के लिए नवीनतम source शाखा से target के लिए प्रतिबद्ध चाहते हैं,:

git checkout target 
git cherry-pick source 
git checkout source 
git reset --hard source^ 

तो प्रतिबद्ध नहीं था पिछले, आप पिछले आदेश के बजाय git rebase -i का उपयोग करें और विशिष्ट चयन करना होगा के लिए नाम के लिए प्रतिबद्ध आपका cherry-pick

+0

धन्यवाद! बहुत अच्छा काम करता है। – prismofeverything

+6

ध्यान दें कि ** इतिहास पुनर्लेखन ** को रीसेट/रीबेस करें, इसलिए इतिहास का प्रकाशित होने पर उनका उपयोग नहीं किया जाना चाहिए - तो आपको इसके बजाय गिट-रीवर्ट का उपयोग करना होगा। –

2

आम तौर पर, जब मैं कुछ इस तरह करते हैं, मैं लूंगा:

  1. Git diff (जैसे git diff HEAD^ HEAD)
  2. का उपयोग कर एक रिवर्स पैच फ़ाइल बनाएँ शाखा को यह रिवर्स पैच लागू करें मैं परिवर्तन निकालना चाहते हैं से।
  3. चेक बाहर शाखा मैं करता लागू करने के बारे
  4. उपयोग git cherry-pick परिवर्तन चाहते हैं लागू करने

मेरा मानना ​​है कि वहाँ एक आसान तरीका है, लेकिन मैं यह पसंद करते हैं के बाद से मैं का उपयोग करें (और याद) diff/चेरी-पिक कमांड

+3

चरण 1 + 2 == गीट वापस लाएं – Dustin

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