2012-02-16 7 views
32

मैंने अभी शुरुआत की है कि git का उपयोग कैसे करें, अच्छी तरह से प्रगति करना।क्यों गिट खींचें निर्देशिका को वापस लाता है जिसे मैंने हटा दिया है?

एक प्रयोग के रूप में, मैंने दो निर्देशिकाओं (प्रत्येक में दो फाइलें) और रूट निर्देशिका में दो फाइलें अपलोड करने के लिए push का उपयोग किया। यह ठीक काम किया।

तब मैंने दो निर्देशिकाओं में से एक को हटा दिया जो मेरे पास स्थानीय रूप से है (लेकिन गिट पर नहीं)। जब मैं git status का उपयोग यह इस के बारे में पता लगता है:

deleted: test/Testfile.as
deleted: test/Testile2.as

लेकिन जब मैं git pull का उपयोग अपनी फ़ाइलें वापस पाने के लिए, वे अपने स्थानीय फ़ोल्डर के लिए वापस जाने के लिए नहीं है । मैंने git fetch भी कोशिश की है।

एकमात्र तरीका है कि मैं सबकुछ वापस पाने में सक्षम हूं, git clone है, लेकिन यह तार्किक प्रतीत नहीं होता है क्योंकि मुझे स्थानीय स्तर पर अपनी मास्टर निर्देशिका को हटाने की आवश्यकता है और फिर इसे फिर से क्लोन करना होगा (या वैकल्पिक रूप से इसके लिए एक नया स्थान निर्दिष्ट करें क्लोन फाइलें)।

स्थानीय रूप से हटाए गए जिथब से फ़ाइलों और फ़ोल्डर्स को पुनर्प्राप्त करने का उचित तरीका क्या है?

+1

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

उत्तर

48

git pull सिर्फ अपने काम निर्देशिका में लाए जाने प्रतिबद्ध विलीन हो जाती है और अपने हटाए निर्देशिका नहीं हो जाएगी (लेकिन संघर्ष के बारे में चेतावनी सकता है।)

आप अपने काम निर्देशिका में फ़ोल्डर्स नष्ट कर दिया है, तो आप के लिए है करें:

git checkout -- test 

इसे वापस पाने के लिए।

या आप अपनी कार्य निर्देशिका को HEAD स्थिति में पूरी तरह से लाने के लिए git reset --hard कर सकते हैं।

+0

धन्यवाद, यह काम किया। इस सवाल के पीछे, जब मैं स्थानीय रूप से उन्हें हटाने के बाद 'गिट पुश' करता हूं तो गिट पर निर्देशिका क्यों हटाई जाती है? – Marty

+0

@MartyWallace - आपको एक 'गिट आरएम' करना है और हटाना, प्रतिबद्ध करना और धक्का देना है। – manojlds

3

गिट पुल परिवर्तनों में विलय करेगा। इसके बारे में सोचें जो आपने संशोधित की है। यदि आपने इसे संशोधित किया है तो एक गिट पुल रिमोट कॉपी के साथ फ़ाइल की सामग्री को प्रतिस्थापित नहीं करता है। भले ही कोई विरोधाभासी परिवर्तन हो, फिर भी यह आपको एक तेज गति से चेतावनी देता है।

आप एक राज्य है जहां हटाना केवल अप्रतिबद्ध परिवर्तन है में अपने भंडार है, और आप उसे वापस चाहते हैं, तो ऐसा एक git reset head --hard

या, आप अन्य परिवर्तन आप जगह में छोड़ना चाहते हैं, ऐसा git checkout -- test

13

आप अपने संग्रह को पिछले कार्य संस्करण में वापस करना चाहते हैं। यह गिट-रीसेट के लिए एक नौकरी है।

git checkout -- test/ 
-1

git reset --hard <commit hash> मतलब है HEAD के लिए प्रतिबद्ध है और एक विशेष की ओर इंगित करता हो जाएगा जो कुछ भी करता:

git reset --hard 

इस useful explanation of git-reset

के माध्यम से पढ़ने के लिए आप भी बाहर की जाँच कर सकता है उन फ़ाइलों को, जब आप सुनिश्चित हो आपने उस प्रतिबद्धता के बाद बनाया है हैश उपलब्ध नहीं होगा। इसका कारण यह है कि आप हेड को अलग करने के लिए हेड को इंगित कर रहे हैं। यदि आप जबरन धक्का देते हैं तो आप सभी कामों को खो देंगे।

नोट: गिट में git reset --hard कमांड का उपयोग करते समय सावधान रहें।

1
git pull और git checkout से

अलावा, git revert भी हटाई गई फ़ाइलों

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