2012-03-10 10 views
9

मैंने किया:पहली प्रतिबद्धता के बिना git rm -rf dirname पूर्ववत कैसे करें?

git init 
git add . 
git rm -rf dirname 

, अन्य answsers को देखते हुए वापस लिए जाने के लिए कोई सिर है जाहिरा तौर पर क्योंकि वहाँ git reset --hard HEAD, git checkout -f और git reflog काम नहीं किया, और न ही एक फ़ाइलों से वापस पाने के लिए करते हैं।

क्या फाइलें वापस पाने का कोई तरीका है?

उत्तर

8

कोई रास्ता नहीं है।

आमतौर पर, git rm जांचता है कि फ़ाइलों को हटाने से पहले फ़ाइलों को पहले ही कर दिया गया है, इसलिए आप अपना कोई काम नहीं खोते हैं। हालांकि, -f का उपयोग इस चेक को ओवरराइड करता है।

संक्षेप में:

  • -f प्रयोग न करें।
  • जो कुछ भी आपने नहीं किया है उसे स्पर्श न करें।
+2

यूनिक्स की तरह - '-f' का अर्थ है कि आप बेहतर तरीके से सुनिश्चित कर रहे हैं कि आप क्या कर रहे हैं। –

1

नहीं, जहां तक ​​मुझे पता है। मेरा मानना ​​है कि गिट फाइलों को अनलिंक करता है, जैसे rm -rf करता है। इससे कोई फर्क नहीं पड़ता कि यह फाइलों के बारे में जानता है या नहीं, यह खुशी से निर्देशिका को नकार देगा। असल में, आपका एकमात्र सहारा फ़ाइल पुनर्प्राप्ति उपकरण का उपयोग करने का प्रयास करना है जैसे कि किया गया rm -rf

0

Git dirname निर्देशिका पर नज़र रखने के नहीं है, तो यह आप git rm -rf साथ निर्देशिका को नष्ट करने के रूप में यह इसके बारे में पता नहीं है की अनुमति नहीं होगी। आप (के लिए होता है)

fatal: pathspec 'dirname' did not match any files 

की तरह एक त्रुटि प्राप्त होगी केवल जिस तरह से आप को नष्ट कर दिया जा सकता था अगर आप git init के बाद एक git add . या git add dirname किया था। यदि ऐसा है, तो आपकी फाइलें चली गई हैं और आप उन्हें वापस नहीं ले सकते क्योंकि यह कभी प्रतिबद्ध नहीं था और गिट इसे ट्रैक नहीं करता है। यह एक सामान्य फ़ोल्डर पर एक rm -rf कर के रूप में के रूप में अच्छा है (और जब तक आप बैकअप होना ठीक नहीं कर सकते हैं)

+0

क्या यह है, यद्यपि? मैंने इसका परीक्षण नहीं किया, लेकिन मैंने सोचा कि -एफ ध्वज उस त्रुटि को दबा देगा। – Matt

+0

जब तक आप '-f' का उपयोग नहीं करते? वह "अद्यतित चेक ओवरराइड" करेगा, जो भी इसका मतलब है। –

+0

@ मैट - नहीं, यह इसे दबा नहीं देता है। 'git rm' में '-f' केवल अप-टू-डेट चेक को ओवरराइड करना है। – manojlds

0

git reset --hard मदद की, जबकि विलोपन अभी तक प्रतिबद्ध नहीं किया गया था और, आम तौर पर बोल रहा है, विलोपन Ctrl+Z

1

द्वारा बाधित किया गया था चेतावनी: git prune-n विकल्प (1) बिना आपके पहुंचने योग्य डेटा को मिटा देगा।

git prune और git cat-file का उपयोग करके एक तरीका हो सकता है।

git prune -n इच्छा सूची जो वस्तुओं छंटाई द्वारा हटा दिया जाएगा चल रहा है:

$ git prune -n 
9cc84ea9b4d95453215d0c26489d6a78694e0bc6 blob 
c315143703752ef4d11ca7d93f2c324872b2ebff blob 

प्रत्येक पंक्ति एक नष्ट कर दिया फ़ाइल से मेल खाती है।

git cat-file -p 9cc84ea9b4d95453215d0c26489d6a78694e0bc6 > restored-filename.whatever 

(1) git prune डॉक्स से::

नाम

अब, git cat-file का उपयोग कर, हम एक नई फाइल करने के लिए निकाली गई फ़ाइल की सामग्री को बहाल करने में सक्षम हैं
गिट-प्रून - ऑब्जेक्ट डेटाबेस

से सभी पहुंच योग्य ऑब्जेक्ट्स को प्रोस्ट करें विकल्प
-n
- ड्राय रन
कुछ भी न हटाएं; बस रिपोर्ट करें कि यह क्या हटा देगा।