आपको किसी भी फाइल को वापस प्राप्त करने में सक्षम होना चाहिए जिसे आपने सूचकांक में जोड़ा है (जैसे, आपकी स्थिति में, के साथ git add .
) हालांकि यह थोड़ा काम हो सकता है। सूचकांक में एक फ़ाइल जोड़ने के लिए, git इसे ऑब्जेक्ट डेटाबेस में जोड़ता है, जिसका अर्थ है कि इसे इतनी देर तक पुनर्प्राप्त किया जा सकता है क्योंकि कचरा संग्रह अभी तक नहीं हुआ है। जकुब नारुबस्की के जवाब में यह कैसे दिया जाए, इसका एक उदाहरण है:
हालाँकि, मैंने कोशिश की कि एक परीक्षण भंडार पर, और वहाँ कुछ समस्याएं थीं - --cached
होनी चाहिए --cache
, और मैंने पाया कि यह वास्तव में .git/lost-found
निर्देशिका नहीं बना रही थी । हालाँकि, निम्न चरणों ने मेरे लिए काम किया:
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)")
यह ऑब्जेक्ट डेटाबेस में सभी ऑब्जेक्ट्स को आउटपुट करना चाहिए जो किसी भी रेफरी द्वारा इंडेक्स में या रीफ्लॉग के माध्यम से पहुंच योग्य नहीं हैं। आउटपुट कुछ इस तरह दिखाई देगा:
unreachable blob 907b308167f0880fb2a5c0e1614bb0c7620f9dc3
unreachable blob 72663d3adcf67548b9e0f0b2eeef62bce3d53e03
... और उनमें से प्रत्येक के लिए, आप कर सकते हैं:
git show 907b308
फ़ाइल की सामग्री को आउटपुट करने के लिए।
बहुत अधिक उत्पादन?
के जवाब में अद्यतन sehe के नीचे टिप्पणी:
यदि आप पाते हैं कि आपके पास उस कमांड से आउटपुट में कई कमिट्स और पेड़ सूचीबद्ध हैं, तो आप आउटपुट से किसी भी ऑब्जेक्ट को हटाना चाहते हैं, जो कि बिना लाइसेंस वाले कॉम्पट से संदर्भित है। (आमतौर पर आप वैसे भी रिफ्लेक्ट के माध्यम से इन कमिट्स पर वापस आ सकते हैं - हम सिर्फ उन वस्तुओं में रुचि रखते हैं जिन्हें इंडेक्स में जोड़ा गया है, लेकिन कभी भी कमिट के माध्यम से नहीं पाया जा सकता है।)
सबसे पहले, कमांड का आउटपुट सेव करें:
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)") > all
अब उन अप्राप्य कमानों के ऑब्जेक्ट नाम के साथ पाया जा सकता है:
egrep commit all | cut -d ' ' -f 3
तो आप केवल उन पेड़ों और वस्तुओं को पा सकते हैं जिन्हें सूचकांक में जोड़ा गया है, लेकिन किसी भी बिंदु पर प्रतिबद्ध नहीं हैं:
git fsck --cache --unreachable $(git for-each-ref --format="%(objectname)") \
$(egrep commit all | cut -d ' ' -f 3)
यह आपके द्वारा विचार की जाने वाली वस्तुओं की संख्या में भारी कटौती करता है।
अद्यतन: फिलिप ओकले ने विचार करने के लिए वस्तुओं की संख्या में कटौती करने का एक और तरीका सुझाया, जो कि अभी हाल ही में संशोधित फ़ाइलों के तहत विचार करना है .git/objects
। आप इनसे मिल सकते हैं:
find .git/objects/ -type f -printf '%TY-%Tm-%Td %TT %p\n' | sort
(मुझे लगता है कि यहाँfind
मंगलाचरण मिल गया है ।) उस सूची का अंत इस तरह दिख सकता है:
2011-08-22 11:43:43.0234896770 .git/objects/b2/1700b09c0bc0fc848f67dd751a9e4ea5b4133b
2011-09-13 07:36:37.5868133260 .git/objects/de/629830603289ef159268f443da79968360913a
जिस स्थिति में आप उन वस्तुओं को देख सकते हैं:
git show b21700b09c0bc0fc848f67dd751a9e4ea5b4133b
git show de629830603289ef159268f443da79968360913a
(ध्यान दें कि आपको /
ऑब्जेक्ट नाम प्राप्त करने के लिए पथ के अंत में निकालना होगा ।)