यदि आपके Mac प्रोजेक्ट से कोई फ़ाइल कमिट करने से पहले गायब हो गई है, तो सबसे पहले Mac का ट्रैश और कोई भी Time Machine या क्लाउड रिकवरी जांचें। फिर Git जांचें: यदि संस्करण इंडेक्स या किसी कमिट में है, तो यह हटाई गई फ़ाइल को पुनर्स्थापित कर सकता है, और किसी अनरीचेबल ऑब्जेक्ट के रूप में सहेजी गई सामग्री को भी सामने ला सकता है। यदि फ़ाइल केवल अनसेव्ड या अनस्टेग्ड वर्किंग-कॉपी सामग्री के रूप में मौजूद थी, तो हो सकता है कि Git के पास कोई कॉपी न हो। प्रोजेक्ट में नई फ़ाइलें बनाने से पहले इन जांचों को पूरा करें।
1. ट्रैश जांचें और Mac में खोजें
Dock से ट्रैश खोलें और नाम से फ़ाइल खोजें। यदि यह आपको मिल जाती है, तो इस पर control-क्लिक करें और इसे इसके मूल स्थान पर वापस लाने के लिए Put Back चुनें, या इसे किसी सुरक्षित स्थान पर खींचें (ड्रैग करें)। Apple यह भी सुझाव देता है कि यदि फ़ाइल को स्थानांतरित (move) या नाम बदला (rename) गया हो, तो Spotlight से खोजें। iCloud Drive में मौजूद किसी प्रोजेक्ट फ़ोल्डर के लिए, ट्रैश के साथ-साथ iCloud के Recently Deleted या Data Recovery विकल्पों की भी जांच करें; Apple का कहना है कि योग्य हटाई गई iCloud Drive फ़ाइलों को आम तौर पर 30 दिनों के भीतर पुनर्प्राप्त किया जा सकता है। Apple के iCloud रिकवरी निर्देश
यदि किसी डेवलपर टूल ने फ़ाइल को सीधे हटा दिया है, या ट्रैश खाली कर दिया गया है, तो अगले चरण पर जाएं। यह मानकर न चलें कि हर विलोपन (deletion) ट्रैश से होकर ही जाता है।
2. Time Machine में देखें, स्थानीय स्नैपशॉट सहित
यदि Time Machine सक्षम थी, तो यदि उपलब्ध हो तो बैकअप डिस्क कनेक्ट करें। Finder में, वह फ़ोल्डर खोलें जिसमें पहले वह फ़ाइल थी, Time Machine खोलने के लिए Spotlight का उपयोग करें, फिर टाइमलाइन या बैकअप तीरों को हटाने से पहले की किसी तारीख पर ले जाएं। फ़ाइल चुनें और Restore पर क्लिक करें। Apple का कहना है कि पुनर्स्थापित आइटम अपने मूल स्थान पर वापस आ जाते हैं, इसलिए यदि आप किसी भी चीज़ को बदलने से पहले संस्करणों की तुलना करना चाहते हैं, तो किसी अलग स्थान पर पुनर्स्थापित करने पर विचार करें। Time Machine आइटम पुनर्स्थापित करने के लिए Apple की मार्गदर्शिका
डिस्कनेक्ट की गई बैकअप डिस्क का मतलब यह नहीं है कि रिकवरी संभव नहीं है। Time Machine Mac पर संग्रहीत स्थानीय स्नैपशॉट का उपयोग कर सकती है, लेकिन ये अस्थायी होते हैं: Apple का कहना है कि स्नैपशॉट आम तौर पर प्रति घंटे सहेजे जाते हैं और 24 घंटों के लिए रखे जाते हैं, अतिरिक्त स्नैपशॉट उपलब्ध स्थान पर निर्भर करते हैं। वे केवल तभी मौजूद होते हैं जब Time Machine उपयोग में हो, और वे किसी बाहरी बैकअप का विकल्प नहीं हैं। Time Machine स्थानीय स्नैपशॉट के बारे में
3. Git से ट्रैक की गई फ़ाइल को पुनर्स्थापित करें
Terminal खोलें, प्रोजेक्ट डायरेक्टरी में जाएं, और कुछ भी पुनर्स्थापित करने से पहले फ़ाइल की स्थिति जांचें:
git status --short
यदि हटाया गया पाथ दिखाई देता है और फ़ाइल ट्रैक की गई थी, तो इसे इसके प्रोजेक्ट-रिलेटिव पाथ के साथ इंडेक्स से पुनर्स्थापित करें:
git restore -- path/to/file.ext
यह इंडेक्स किए गए संस्करण को वर्किंग ट्री में कॉपी करता है। यदि इंडेक्स में फ़ाइल नहीं थी, लेकिन यह नवीनतम कमिट में मौजूद है, तो इसके बजाय HEAD से पुनर्स्थापित करें:
git restore --source=HEAD -- path/to/file.ext
यह अंतर मायने रखता है: वर्किंग-ट्री रीस्टोर के लिए git restore डिफ़ॉल्ट रूप से इंडेक्स का उपयोग करता है; --source=HEAD स्पष्ट रूप से नवीनतम कमिट का चयन करता है। पुनर्स्थापना निर्दिष्ट वर्किंग-ट्री पाथ को चयनित संस्करण से ओवरराइट कर देती है, इसलिए पहले वहां मौजूद किसी भी ऐसी फ़ाइल को अलग कॉपी कर लें जिसकी सामग्री महत्वपूर्ण हो। Git इन रीस्टोर स्रोतों और व्यवहार का दस्तावेज़ीकरण अपने git restore मैनुअल में करता है।
ये कमांड किसी बिल्कुल नई अनट्रैक्ड फ़ाइल या उन संपादनों को पुनर्प्राप्त नहीं कर सकते हैं जिन्हें कभी स्टेज या कमिट नहीं किया गया था। Git केवल उन्हीं संस्करणों के बारे में जानता है जो इसके इंडेक्स, कमिट या ऑब्जेक्ट डेटाबेस में पहुंचे हैं।
4. अंतिम उपाय के रूप में Git के अनरीचेबल ऑब्जेक्ट्स खोजें
कभी-कभी Git फ़ाइल की सामग्री को संग्रहीत कर लेता है, भले ही कोई शाखा या कमिट उसकी ओर इंगित न कर रहा हो—उदाहरण के लिए, कोई ऐसा संस्करण जिसे स्टेज किया गया था और फिर इंडेक्स से हटा दिया गया था। प्रोजेक्ट डायरेक्टरी से, अनरीचेबल ऑब्जेक्ट्स का निरीक्षण करें:
git fsck --unreachable
Git किसी अनरीचेबल blob के बाद ऑब्जेक्ट ID की रिपोर्ट कर सकता है। प्रोजेक्ट में बदलाव किए बिना किसी संभावित विकल्प का निरीक्षण करने के लिए, उपयोग करें:
git cat-file -p OBJECT_ID
OBJECT_ID को रिपोर्ट की गई ID से बदलें। यदि आउटपुट वही लापता फ़ाइल है, तो इसे प्रोजेक्ट के बाहर किसी रिकवरी कॉपी में रीडायरेक्ट करें, उदाहरण के लिए:
git cat-file -p OBJECT_ID > "$HOME/Desktop/recovered-file.txt"
यहाँ फ़ाइल नाम और एक्सटेंशन केवल उदाहरण हैं; ऐसा गंतव्य और नाम चुनें जो फ़ाइल के लिए उपयुक्त हो। Git ब्लॉब्स सामग्री संग्रहीत करते हैं, मूल पाथ नहीं, इसलिए आपको संभावित विकल्पों का निरीक्षण करके सही नाम की पहचान स्वयं करनी पड़ सकती है। git fsck अनरीचेबल ऑब्जेक्ट्स की रिपोर्ट करता है, और इसका --lost-found विकल्प ब्लॉब सामग्री को .git/lost-found/other/ के तहत लिख सकता है; दोनों में से कोई भी तरीका पुनर्प्राप्त करने योग्य संस्करण की गारंटी नहीं देता है। Git का git fsck दस्तावेज़ीकरण
जब किसी भी रिकवरी स्रोत में फ़ाइल न हो
यदि ट्रैश, बैकअप, क्लाउड रिकवरी, Git इंडेक्स, कमिट और अनरीचेबल Git ऑब्जेक्ट्स में यह नहीं है, तो इन प्रलेखित टूल्स के माध्यम से कोई कॉपी उपलब्ध नहीं हो सकती है। विशेष रूप से, एक अनट्रैक्ड फ़ाइल जिसे कभी स्टेज नहीं किया गया था, वह Git के सहेजे गए इतिहास से बाहर होती है। यदि आपने उपयोग किया हो, तो अपने एडिटर के स्थानीय इतिहास (local history) या किसी अन्य बैकअप सेवा की जांच करें; उपलब्धता और रिकवरी के चरण उस उत्पाद पर निर्भर करते हैं। जब तक आप जांच कर रहे हों, प्रोजेक्ट को वैसा ही रहने दें, और पुनर्प्राप्त की गई किसी भी सामग्री को एक नए नाम के तहत तब तक सहेजें जब तक कि आप पुष्टि न कर लें कि यह वही संस्करण है जिसकी आपको आवश्यकता है।
स्रोत
- If you’re missing files in iCloud Drive — Apple Support
- Restore items backed up with Time Machine on Mac — Apple Support
- About Time Machine local snapshots — Apple Support
- git restore — Git
- git fsck — Git