2011-02-15 16 views
20

मैं उलझन में हूं। मैं पिछली प्रतिबद्धता पर वापस जाना चाहता हूं जिसे मैंने "गिट लॉग" में पहचाना है।गिट: पिछली प्रतिबद्ध स्थिति पर वापस जाएं

लेकिन जब मैं "गिट चेकआउट" करता हूं, तो मुझे प्रतिबद्धता नहीं मिलती है। कुछ नहीं बदलता है। यह मुझे बताता है कि मैं अलग सिर मोड में हूं, लेकिन जिन फाइलों को मैं चाहता हूं वे वहां नहीं हैं।

मैं क्या गलत कर रहा हूँ?

MRB

उत्तर

18

git reset --hard <commit> मैनपेज से:

काम कर रहे पेड़ और पेड़ की है कि सूचकांक मेल करने के लिए ले जाया जा रहा। काम करने वाले पेड़ में ट्रैक की गई फ़ाइलों में से कोई भी परिवर्तन खो गया है।

git checkout आपकी कार्यशील निर्देशिका को किसी दूसरी शाखा में स्विच करने या प्रतिबद्ध करने के लिए है। यह वहां HEAD स्थानांतरित नहीं करता है।

+0

फिर, 'रीसेट' आपकी अनुक्रमणिका और कार्यशील निर्देशिका को पिछले राज्य में रीसेट करने के लिए है। 'चेकआउट' एक नई या अलग शाखा की जांच के लिए है। एक बार जब आप इसका इस्तेमाल करते हैं तो यह इतना भ्रमित नहीं होता है। =) –

+1

कूल ट्यूटोरियल्स के लिए http://www.gitready.com/ और http://learn.github.com/p/intro.html देखें, और उसके बाद http://gitref.org किसी संदर्भ के लिए जब आप ' तैयार –

+0

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

9

रीसेट गिट रीसेट न करें - यह स्थायी है!

git stash -u 
बजाय

का उपयोग करें! यदि आपके पास काम का एक टुकड़ा है जिसमें आप दुर्घटनाग्रस्त हो जाते हैं, तो भी आप इसे वापस प्राप्त कर सकते हैं। यह तब तक आपके रिमोट पर धकेलता नहीं है जब तक कि आप इसे बाहर निकालने और इसे दबाकर ऐसा करने का विकल्प नहीं चुनते।

इसके अलावा, आप सही ट्रैक पर हैं कि आप एक ही चीज़ को पूरा करने के लिए git checkout का उपयोग कर सकते हैं। वाक्यविन्यास

git checkout HEAD -- . 

लेकिन यह git reset --hard जैसी ही समस्या है। छेड़छाड़ के साथ चिपकाओ और आप भविष्य में अपने बालों को खोने से बचाएंगे।

लंबे समय तक जवाब

ऊपर समाधान अपने सभी परिवर्तनों को वापस। हालांकि, आपने कुछ बदलावों से छुटकारा पाने के लिए कहा था। मैं इसे पूर्णता के लिए जोड़ दूंगा।

ऐसा करने के लिए, आप

git add file1 file2 file3 
git stash save --patch 

अब आप वास्तव में क्या आप गायब बनाना चाहते के लिए प्रेरित किया जाएगा कर सकते हैं ... जो भी विवरण के किसी स्तर तक नीचे। इसलिए यदि आप ऐसा करना चुनते हैं तो आप एक फ़ाइल में केवल कुछ बदलावों को सुरक्षित रूप से "अस्वीकार कर सकते हैं"।

+4

क्या होगा यदि मैं इसे स्थायी रखना चाहता हूं? मैं कभी-कभी बदलाव करना शुरू करता हूं जिसे मैं कभी नहीं देखना चाहता हूं। –

+1

"रीसेट गिट न करें - यह स्थायी है!" नहीं, यह 'गिट रीफ्लॉग' के बारे में क्या है? – YemSalat

+0

हां, कृपया ध्यान दें कि यह उत्तर गलत है ... 'गिट रीसेट - हार्ड 'केवल स्थायी रूप से असामान्य कोड को बदलता है –

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