2010-10-06 14 views
6

मान लीजिए कि आप एक शाखा master और एक अन्य शाखा production, करते हैं दोनों फ़ाइल prog.py का एक संस्करण है, साथ ही कई अन्य फ़ाइलों से युक्त। कल्पना करें कि आप prog.py सहित उत्पादन शाखा में कई फ़ाइलों को संशोधित करते हैं। अब, master शाखा में अपने संस्करण के लिए लागू किया जा केवल कुछproduction शाखा में prog.py को किए गए परिवर्तन होने के लिए सबसे अच्छा तरीका क्या है?गिट: किसी अन्य शाखा से फ़ाइल के कुछ हिस्सों को जोड़ने का सबसे अच्छा तरीका?

git checkout master 
git checkout production -- prog.py 

क्योंकि मैं git add -p करते हैं और हाथ से परिवर्तन का चयन करने में सक्षम होने की उम्मीद कर रही थी:

मैं master शाखा में जाने और production शाखा से फ़ाइल आयात शुरू कर दिया। समस्या यह है कि prog.py दोनों काम कर रहे पेड़ और सूचकांक में है। मैं इसे पेड़ को छूए बिना इंडेक्स से कैसे हटा सकता हूं?

या वहां जो prog.py में आने वाले बदलाव master शाखा में production शाखा से आयात किया जाना चाहिए चुनने के लिए एक बेहतर तरीका है?

उत्तर

17

मुझे यकीन है कि अगर यह सच था जब यह सवाल पूछा गया था नहीं कर रहा हूँ, लेकिन Git के वर्तमान संस्करण के साथ आप निम्नलिखित कर सकते हैं:

git checkout -p production -- prog.py 

और आप एक ही इंटरैक्टिव हंक पिकर मिलेगा आप अधिकांश -p कमांड के लिए करते हैं।

+0

धन्यवाद! मैंने स्वीकार्य उत्तर को आपके से बदल दिया है, क्योंकि यह एक अधिक कुशल विधि है। – EOL

4

छोटे और दानेदार काम करना जो केवल एक चीज करते हैं, और उसके बाद चेरी-पिकिंग को चुनकर आप अन्य शाखाओं में git cherry-pick $commit_id का उपयोग करके उचित दृष्टिकोण की तरह लग रहे हैं।

+0

धन्यवाद। क्या चेरी-पिक आपको चेरी को * एक फ़ाइल के भीतर * परिवर्तन लेने की अनुमति देता है? – EOL

+1

यह चेरी-पिक्स काम करता है, जिसे आप निश्चित रूप से बाद में संशोधित कर सकते हैं यदि यह पता चला कि आपने अपनी इच्छाओं को दानेदार के रूप में नहीं किया है जैसा आप चाहते थे। जैसे। 'गीट रीसेट हेड ~ 1', और 'गिट ऐड-पी', और 'गिट प्रतिबद्ध-सी $ commit_आईडी', – rafl

1

ठीक है, मैं सिर्फ git reset की कोशिश की, और यह सूचकांक में संग्रहीत परिवर्तन निकालने के लिए किया था। git add -p तब अपेक्षित कार्य करता है, जिससे किसी व्यक्ति को अलग-अलग परिवर्तनों को चुनने की अनुमति मिलती है (यानी इंडेक्स में संग्रहीत)। गैर-वांछित परिवर्तनों को git commit, और फिर git reset --hard से त्याग दिया जा सकता है।

उम्मीद है कि प्रश्न और यह उत्तर किसी और के लिए ब्याज का होगा! :)

पीएस: मैंने इस उत्तर को स्वीकार किए गए एक के रूप में चिह्नित किया क्योंकि यह मूल प्रश्न में पूछे गए एकल फ़ाइल की जांच करता है।

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