2012-02-28 9 views
54

में पूर्ववत हटाएं मैंने कुछ बेवकूफ बना दिया है। मैंने गिट प्रतिबद्ध (फ़ाइल संपादन + नई फाइलें) (सी) का उपयोग करके एक प्रतिबद्ध किया। फिर मैंने अंतिम प्रतिबद्धता में संशोधन किया। फिर मैंने git rm -r का उपयोग करके सभी फ़ाइलों को रिकर्सली (!) हटा दिया, फिर मैंने एक और गिट प्रतिबद्ध (सी) बनाया।जीआईटी

 
A-B-C 
    ↑ 
    master 

क्या फाइलों को अनदेखा करने का कोई तरीका है लेकिन मेरे पहले प्रतिबद्धता में हुए बदलावों को रखने का कोई तरीका है? (सी) मैं बजाय वापस नहीं जाना चाहता (बी)। मैंने गिट रीसेट की कोशिश की - सॉफ्ट हेड ^, तो फिर गिट स्टेटस सूचियों वाली फाइलों को सूचीबद्ध करता है, फिर मैंने गिट चेकआउट किया, लेकिन अभी भी कोई भाग्य नहीं है। मुझे यह भी नहीं पता कि यह संभव है या नहीं।

+0

तो आप अपनी प्रतिबद्धताओं की फाइलें वापस चाहते हैं? – uday

+1

नहीं, मैं अभी भी सी पर होना चाहता हूं लेकिन फ़ाइलों को हटाए बिना, केवल मेरी फ़ाइल संपादन और फ़ाइल जोड़ता है। मेरे पास अब मेरे काम करने वाले पेड़ में फाइल नहीं है, वे हटा दिए गए हैं। – Nately

उत्तर

158

अपने आप को एक पक्ष बनाओ और git checkout <hash> पर अन्य उत्तरों की तरह सुझाव नहीं देते हैं और अधिक समस्याओं में जाते हैं।

आप अपनी कार्यशील निर्देशिका से फ़ाइल नष्ट कर दिया है और अभी तक परिवर्तन के लिए प्रतिबद्ध नहीं यदि, कार्य करें:

git checkout -f 

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

हटाई गई फ़ाइलों को फिर से वापस किया जाना चाहिए।

यदि नहीं और यदि आप git reflog से जो प्रतिबद्धता चाहते हैं उसे प्राप्त कर सकते हैं (सी, इत्यादि - आपका प्रश्न स्पष्ट नहीं है), तो बस git reset --hard <hash from reflog> करें और आपको पूरा सेट होना चाहिए।

+3

+1 आप इस मुद्दे को स्पष्ट करने के लिए, एक अलग सिर प्रश्न (जैसे http://stackoverflow.com/questions/3965676/why-did-git-detach-my-head/3965714#3965714) पर एक लिंक जोड़ सकते हैं गिट चेकआउट SHA1 उत्तर। क्या इस मामले में ORIG_HEAd ने मदद की है? (http://stackoverflow.com/questions/964876/head-and-orig-head-in-git/964927#964927) – VonC

+1

ठीक है, तो यह उत्तर वास्तव में बेहतर है। रीसेट करें - पर मुझे मेरी मास्टर शाखा पर छोड़ देता है, और मुझे 'अलग सिर' राज्य में नहीं छोड़ा गया है। मेरा खोया डेटा पुनर्प्राप्त करने के मामले में साशा का जवाब भी अच्छा था। – Nately

+2

अभी मेरे गधे को बचाने के लिए धन्यवाद। – Seth

5

यदि मैं आपको सही ढंग से समझता हूं तो आप प्रतिबद्ध सी को फिर से लिखते हैं। तो मूल प्रतिबद्धता, चलो इसे कॉल करें C1 आपके प्रतिबद्ध ग्राफ से पहुंच योग्य नहीं है, लेकिन यह अभी भी वहां है (गिट कुछ समय के लिए काम करता है)। प्रतिबद्ध हैश प्राप्त करने के लिए git reflog का उपयोग करें और git checkout <hash> या पुरानी स्थिति C1 प्राप्त करने के लिए एक अन्य उपयुक्त आदेश का उपयोग करें।

+0

मेरे भगवान! बहुत बहुत धन्यवाद! प्रतिबद्धता वहां थी। आपने मुझे तीन सप्ताह का काम बचाया (आखिरी प्रतिबद्धता के बाद से))। धन्यवाद! – Nately

+0

एक और सवाल। अब यह कहता है कि मैं 'अलग सिर' राज्य में हूं। मैं अपनी 'मास्टर' शाखा पर कैसे वापस आ सकता हूं? – Nately

+0

आपका स्वागत है। हालांकि, मैं नीचे वोट नहीं समझता। एक गिट रीसेट --हार्ड संभावित रूप से कहीं अधिक खतरनाक है। यह स्पष्ट नहीं था कि पोस्टर ने मूल प्रतिबद्धता सी में बदलाव किए थे, जिसमें वह रखना चाहते थे। – Sascha

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