क्या मैं हटाई गई फ़ाइलों को पुनर्स्थापित कर सकता हूं (पूर्व में `साफ -fdx` पूर्ववत करें)?


119

मैं github पृष्ठ बनाने के निर्देशों का पालन कर रहा था , और अपनी git उप निर्देशिका में नीचे जाना भूल गया। नतीजतन, मैंने बस दस्तावेजों की एक पूरी निर्देशिका के साथ nuked git clean -fdx
क्या कोई रास्ता है जिससे मैं इस भयानक गलती को पूर्ववत कर सकूं?


2
मुझे यकीन नहीं है, लेकिन मुझे नहीं लगता कि यह संभव है। हालाँकि, आपके फ़ाइल सिस्टम के लिए एक अनिर्धारित उपयोगिता चाल कर सकती है।
स्थैतिक_आरती

9
दिलचस्प बात यह है कि गिट कम्युनिटी बुक भी git clean -fdxबिना किसी चेतावनी के सुझाव देती है कि ऑपरेशन इतना खतरनाक है। मुझे आश्चर्य है कि कितने लोगों ने इस प्रतीत होता है निर्दोष सुझाव के साथ अपनी फ़ाइलों को अप्रासंगिक रूप से नष्ट कर दिया।
कैटपोनोसिस

5
यह जांचना सुनिश्चित करें कि क्या आपके आईडीई में "स्थानीय इतिहास" है जैसे ग्रहण या इंटेलीज आईडीई करते हैं। यह आपको अनजाने git cleanकॉल पर बहुत सारे दिल का दर्द बचा सकता है । इसके अलावा, बिना जांच किए सफाई की आदत से बाहर निकलने की कोशिश करें। एक पॉवर्सशैल या बैश स्क्रिप्ट बनाएं जिसे कहा जा सकता है जो git clean -fdxnवास्तव में अविश्वसनीय रूप से विनाशकारी स्वच्छ चलाने से पहले एक पुष्टिकरण संकेत के साथ चलेगा ।
जोश बर्गेस

जवाबों:


129

नहीं। वे फाइलें चली गई हैं।

(बस लिनक्स पर चेक किया गया: क्लीन कॉल gitunlink() , और पहले से कुछ भी बैकअप नहीं है।)


32
यदि आप रूबीमाइन, एक्लिप्स आदि जैसे उन्नत आईडीई का उपयोग कर रहे हैं, तो संभावना है कि यह हटाई गई फ़ाइलों का स्थानीय इतिहास होगा और आप उन्हें पुनर्प्राप्त करने में सक्षम हो सकते हैं।
उस्मान

1
मेरे मामले में @Usman git cleanने गलती से .ideaछिपे हुए फ़ोल्डर के अंदर आश्रय परिवर्तनों को हटा दिया था और स्थानीय इतिहास ने मुझे बचा लिया!
इमकान

2
@Usman द्वारा शानदार टिप। ग्रहण के साथ, मैं अपनी फ़ाइल को "स्थानीय इतिहास से पुनर्स्थापित करें ..." विकल्प के साथ प्राप्त कर सकता हूं: i.imgur.com/XWNLOk5.gifv
brandizzi

1
दरअसल यह POSSIBLE है लेकिन हैकी विधि के साथ। इस उत्तर को देखें: stackoverflow.com/questions/6267180/can-i-undo-a-git-clean-fdx/…
जस्ट

4
PyCharm में आप उन्हें पुनर्स्थापित भी कर सकते हैं। उनके पास मौजूद फ़ोल्डर में राइट क्लिक करें, लोकल हिस्ट्री में क्लिक करें, डिलीट का पता लगाएं और रिवर्ट पर क्लिक करें।
जुआनजो कोंटी

48
git clean -fdxn

एक सूखा रन करेगा , और आपको दिखाएगा कि अगर आप भाग गए तो क्या फाइलें हटा दी जाएंगी

git clean -fdx

(निश्चित रूप से यह केवल तभी उपयोगी है जब आप इसे समय से पहले जानते हैं, लेकिन अगली बार)


7
इसे जोड़ने के लिए, -nअधिकांश गिट कमांड (और कई अन्य * निक्स कमांड) पर काम करता है।
निक मैक्कडी

23

3
PyCharm भी इसका समर्थन करता है! इस उत्तर के लिए धन्यवाद। मुझे खुशी है कि मैंने शीर्ष 3 के बाद बाकी के उत्तर पढ़े "माफ करना, आप किस्मत से बाहर नहीं हैं"।
ब्रायनसन

18

नहीं "git clean -fdx" उन सभी फ़ाइलों और निर्देशिकाओं को हटा देगा जो गिट आपके कार्य-निर्देशिका से ट्रैक नहीं करती हैं। क्योंकि Git इन फ़ाइलों को ट्रैक नहीं करता है, इसमें इन फ़ाइलों का कोई बैकअप नहीं होगा। कम से कम आमतौर पर नहीं।

यदि आपने अपेक्षाकृत हाल ही में इनमें से किसी एक फाइल पर 'git add' किया है (लेकिन कमिट किया गया), तो एक मौका है कि आप इसे 'git fsck --lost-found' के साथ पा सकते हैं। यह एक कोशिश के काबिल है, लेकिन अपनी आशाओं को बहुत अधिक न पाएं।

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


असली समस्या यह थी कि निर्देशिका को रिपॉजिटरी के रूप में अच्छी तरह से नहीं माना जाता था। लॉग पर वापस देखते हुए, पता चला कि मैं नई रेपो निर्देशिका के बाद सीडी को भूल गया mkdirथा
एरिक

1
इस प्रश्न को पढ़ने के कुछ समय बाद, मैंने Git को एक पैच लिखा जो प्रत्येक डिलीट की गई फ़ाइल का बैक-अप करने के लिए एक कॉन्फ़िगरेशन चर जोड़ता है। शायद यह दूसरों के लिए उपयोगी हो सकता है? github.com/kusma/git/tree/work/clean-backup
kusma

1
मैं आज भाग्यशाली था !!! "Git fsck --lost-found" के लिए धन्यवाद। मैंने सभी परिवर्तनों को प्राप्त करने के लिए निम्नलिखित का उपयोग किया: git fsck | awk '{प्रिंट $ 3}' | xargs git show | tee searchresults.log जैसा कि मुझे पूरी फ़ाइल चाहिए थी जिसे मैंने जोड़ा और फिर हटा दिया, मैं इसे लॉग से प्राप्त कर सकता था। :)
डी सेल्स

11

जैसा कि ऊपर उल्लिखित @kusma, यदि आप भाग्यशाली हैं (यदि आपने कभी "git add" किया है), तो आप संपूर्ण ऑब्जेक्ट को निकालने के लिए निम्नलिखित का उपयोग कर सकते हैं:

git fsck | awk '{print $3}' | xargs git show | tee searchresults.log

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


8

यदि आप किसी Jetbrains IDE का उपयोग कर रहे हैं तो फ़ाइल का स्थानीय इतिहास देखने का विकल्प है। मामले में आपने किया हैgit clean , आप फ़ाइल को फिर से बना सकते हैं और फ़ाइल के स्थानीय इतिहास की जांच कर सकते हैं और इसे वहां से पुनर्स्थापित कर सकते हैं।

एक फाइल के लिए मेरे लिए काम किया। एक पूरी निर्देशिका के लिए मेरे पास कोई विचार नहीं है कि मैं कैसे करूँ।


एक ही फ़ाइल नाम के साथ एक ही स्थान पर फ़ाइल बनाएँ। IDE में राइट क्लिक करें और "Show history" पर क्लिक करें। इसमें से सामग्री को कॉपी पेस्ट करें। बहुत बढ़िया सलाह @ राजेश धन्यवाद।
गहरा

1
मैं बच गया। धन्यवाद।
स्कॉट

फ़ाइल सामग्री की प्रतिलिपि बनाने की कोई आवश्यकता नहीं है, बस फ़ाइल को राइट क्लिक करें, और 'रीवर्ट' पर क्लिक करके इसे उस संस्करण में वापस लाने के लिए (भले ही आपने इसे हटा दिया हो)
n00b

7

मुझे आज यह समस्या थी।

जैसा कि दूसरों ने कहा है, git फाइलों को नहीं रखता है।

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


7

यदि आप ग्रहण पर काम कर रहे हैं, तो संभावित समाधान में से एक ग्रहण के स्थानीय इतिहास को पुनर्स्थापित करना है।


2
im PyCharm और स्थानीय इतिहास का उपयोग कर मुझे बचाया
मनोवैज्ञानिक

1
IntelliJ आईडिया में एक ही बात!
आर्थुरे

रूबीमाइन का स्थानीय इतिहास भी है। मुझे बचाया!
उस्मान

सभी IntelliJ ब्राउज़रों का स्थानीय इतिहास है। शुक्र है। मैं WebStorm का उपयोग कर रहा था और इससे पहले कि मैंने पाया कि पहले एक धमनीविस्फार था। 3 दिन 12 घंटे के काम के दिन चले गए, और मैंने गंभीरता से अपनी मेज पर कठिन शराब की एक बोतल को गिराने पर विचार किया।
जोश बर्गेस

7

वास्तव में हाँ ! यह संभव है! लेकिन बिना git कमांड का उपयोग किए।
हम सभी की जरूरत है Recuva की तरह एक फ़ाइल वसूली उपकरण है ।
बस उस पथ का उल्लेख करें जहां से इसे हटा दिया गया था, और इसे फ़ाइलों को पुनर्प्राप्त करने दें।

इसके अलावा यहाँ उस एप्लिकेशन का उपयोग करने के लिए कुछ उपयोगी नोट हैं:

  1. मैं अत्यधिक फ़ाइलों को पुनर्स्थापित करने से पहले आपको इस चेकबॉक्स की जांच करने की सलाह दूंगा (जब रिकवरी विंडो में हटाए गए फाइलें दिखाई देती हैं):
    Advanced Mode-> Options-> Actions-> -Restore folder structure
    दूंगा इसके साथ आपकी सभी फाइलें फ़ोल्डर संरचना को ध्यान में रखते हुए पुनर्प्राप्त की जाएंगी, तो यह बहुत आसान हो जाएगा बस उस फ़ोल्डर को ड्रैग और ड्रॉप करने के लिए पथ से जहाँ इसे हटा दिया गया था।
  2. USB डिवाइस पर पुनर्प्राप्ति उपकरण स्थापित करें बहुत बेहतर है (नीचे चेतावनी के कारण)
  3. फ़ाइलों को पुनर्स्थापित करने के लिए उल्लेख करते समय, उसी ड्राइव को चुनने से बचें जहां से फ़ाइलें हटा दी गई हैं (फिर से नीचे दी गई चेतावनी के कारण), क्योंकि वर्तमान में पुनर्प्राप्त की गई फ़ाइल अन्य हटाए गए फ़ाइल को अधिलेखित कर सकती है जो अभी तक पुनर्प्राप्त नहीं हुई है। किसी भी USB ड्राइव में फ़ाइलों को पुनर्प्राप्त करना हमेशा एक अच्छा समाधान होता है।

चेतावनी! जैसे ही आप किसी भी फ़ाइल को खो देते हैं (गलती से हटाते हैं), उस ड्राइव को छूने (जोड़ने / संपादित करने) को न करने का प्रयास करें जहाँ से इसे सफल पुनर्प्राप्ति की संभावना बढ़ाने के लिए हटा दिया गया था। अन्यथा आप उस फ़ाइल को पूरी तरह से खो सकते हैं।

यह क्यों काम करता है: जब आप किसी फ़ाइल को हटाते हैं, तो वास्तव में इसे हटाया नहीं जाता है। यह केवल अगली बार "हटाए गए" के रूप में चिह्नित किया जाता है जब आप एक ही ड्राइव में फ़ाइलों को जोड़ते / अपडेट करते हैं, तो उन पुरानी फाइलों को नए के साथ ओवरराइट किया जाता है। लेकिन जब तक वे अधिलेखित नहीं हो जाते, तब तक फ़ाइलों को पढ़ना (और निश्चित रूप से पुनर्प्राप्त करना) संभव है।


1
धन्यवाद आपने मेरी जान बचाई। मुझे नहीं पता कि अगर यह सही उत्तर है, लेकिन मैं सब कुछ ठीक नहीं कर सका, लेकिन मैं भाग्यशाली था क्योंकि मुझे सबसे अधिक महत्वपूर्ण फाइलें मिलीं जिनकी मुझे जरूरत थी।
XzaR

2

मैंने एक कोड के साथ किया था जिसे मैं अपनी रिपॉजिटरी में जोड़ने वाला था और मैंने -xx से साफ किया कि मैं फ़ाइलों को पुनर्स्थापित कर सकता हूं।

मैंने इनॉग्यूड, टेस्टडिस्क, और कई अन्य टूल से डिबगफ, लुक और लिंक का उपयोग करने की कोशिश की, जो दिखाई देता है और किसी ने निर्देशिका को नहीं पाया है कि यह एक बेवकूफ दुर्घटना से मिट गया है।

डाउनलोड एक्सटॉर्नेट एट सोर्सफोर्ज
आपको शायद e2fslibs-dev पैकेज
रन स्थापित करने की आवश्यकता होगी

$ ./configure 
$ make 

यह src फ़ोल्डर के अंदर extundelete के लिए द्विआधारी उत्पन्न करेगा। मेरे मामले में, मैंने गलत तरीके से एक फ़ोल्डर मिटा दिया है। चलो इसे फोन करें

मैं अभी भागा:

$  sudo ./extundelete --restore-directory <full path to FOOBAR > <the partition> 


और इसने RESTORED_FOLDERS नाम से एक फ़ोल्डर बनाया


वाह! हालाँकि, यह मेरे द्वारा वांछित फ़ाइल को पुनर्प्राप्त नहीं करता है, यह कुछ ऐसा है जिसे मैं नोट करूँगा - निश्चित रूप से काम में आएगा!
व्योम

1

यदि आप MSBuild के साथ git का उपयोग कर रहे हैं तो मैंने एक लक्ष्य बनाया जो सभी फाइलों को कॉपी करता है और फिर करता है git clean -xdf। इस तरह आप आसानी से फ़ाइल को पुनर्स्थापित कर सकते हैं यदि आपको पता चलता है कि आपने कुछ हटाया जिसे आप हटाना नहीं चाहते थे। यहां देखें: http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msmonx


1

यदि आप एक मैक का उपयोग कर रहे हैं और एक के साथ समर्थित है Time Machine, तो आप पुनर्स्थापित कर सकते हैं


0

सौभाग्य से, मैंने विंडोज 7. का उपयोग करते समय यह गलती की, बिन रीसायकल करने के लिए चला गया, सभी हटाए गए फ़ाइलों पर प्रकाश डाला और "रिस्टोर" पर क्लिक किया। किया हुआ।


6
आपका क्या अर्थ है? git cleanरीसायकल बिन में फ़ाइलों को स्थानांतरित नहीं करता है।
मेमोरियल

0

यदि आपने अपने परिवर्तनों को धक्का दिया है (git push) तो आप अपने सर्वर से वह जानकारी वापस ला सकते हैं जो अभी तक अपडेट नहीं की गई है। मैंने उन फ़ाइलों को वापस लाने के लिए filezilla का उपयोग किया, जिन्हें मैंने हटा दिया और मेरी स्थानीय फ़ाइलों में प्रतिलिपि बनाई। इसका सबसे अच्छा तरीका यह नहीं है, लेकिन यह कंसोल का उपयोग करके काम करता है और बचता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.