2009-08-18 15 views
30

डेटा को ओवरराइट किए बिना आप git-checkout कैसे कर सकते हैं?डेटा ओवरराइट किए बिना चेकआउट गिट करने के लिए

मैं चलाने

git checkout master 

मैं

error: Entry 'forms/answer.php' would be overwritten by merge. Cannot merge. 

यह आश्चर्य की बात है के बाद से मुझे नहीं पता था कि Git विलीन हो जाती है जब मैं git-checkout। मैं हमेशा कमांड git merge new-feature कमांड के बाद चलाता हूं। गिट चेकआउट पर विलय होने पर यह स्पष्ट रूप से अनावश्यक प्रतीत होता है।

उत्तर

51

गिट आपको चेतावनी दे रहा है कि फ़ॉर्म/answer.php में आपकी कार्यशील प्रतिलिपि या अनुक्रमणिका में बदलाव आया है जो प्रतिबद्ध नहीं हैं।

आप git-stash अपने परिवर्तनों को सहेजने के लिए उपयोग तो Git-गुप्त कोष में लागू उन्हें बहाल करने के लिए कर सकते हैं।

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

+1

'गिट-स्टैश' का उल्लेख करने के लिए धन्यवाद! - मुझे नहीं पता था कि इसका उद्देश्य इस तरह की स्थितियों में इस्तेमाल किया जाना है। –

+2

किसी भी कारण से, मैं गिट-स्टेश कमांड का उपयोग नहीं कर सका। इसके बजाय, मुझे "गिट स्टैश" (कोई हाइफ़न) का उपयोग करना पड़ा। –

+0

यदि आप चाहते हैं कि आपके असामान्य परिवर्तनों को रखने के दौरान एक अलग संशोधन का निरीक्षण करना है (जो कभी-कभी एक बग पेश करने के संशोधन की तलाश में होता है), जैकब का सुझाव ('गिट चेकआउट -एम') बहुत आसान है। –

18

Git uncomitted परिवर्तन की एक 2 तरह मर्ज जब शाखाओं स्विचिंग (git checkout <branch> का प्रयोग करके) करता है, लेकिन आमतौर पर यह केवल तुच्छ (पेड़-स्तर) मर्ज करता है।

git-stashsolution by Karl Voigtland इसके अलावा, आप git checkout लिए अतिरिक्त विकल्प दे सकते हैं निम्न विकल्पों में से एक को चुनने,:

  • टेल Git को शाखा में uncomitted परिवर्तन आप करने के लिए स्विच विलय करने के लिए कड़ी मेहनत करनी साथ -m/--merge विकल्प। इस विकल्प के साथ, वर्तमान शाखा, आपके काम करने वाले पेड़ की सामग्री और नई शाखा के बीच एक तीन-तरफा विलय किया जाता है, और आप नई शाखा में होंगे।

  • टेल को Git uncomitted परिवर्तनों को अधिलेखित, -f विकल्प के साथ स्थानीय परिवर्तन दूर फेंक। चेतावनी: असम्बद्ध परिवर्तन खो जाएंगे!

+2

इसके लिए धन्यवाद। दूसरा ('गिट चेकआउट -एफ मास्टर') ने मुझे वापस पाने में मदद की। मुझे नहीं पता कि मैं क्या परिवर्तन खो गया, लेकिन वे महत्वपूर्ण नहीं थे क्योंकि यह एक रेपो की एक बहुत पुरानी प्रति है जिसे मैं अभी जांचना चाहता था। – mgilson

+0

क्या 'गिट चेकआउट-एफ' के "विपरीत" करना संभव है? असल में मैं गिट को उन फाइलों की जांच करना छोड़ दूंगा जो संघर्ष का कारण बनेंगे। – giusti