भ्रष्ट गुरु शाखा


9

मैं एक दृश्य स्टूडियो परियोजना के लिए विंडोज 7 पर gitExtensions का उपयोग करके अपनी गिट रिपॉजिटरी खोलता हूं। यह अचानक खाली है। रिपॉजिटरी मौजूद है, लेकिन मेरे सभी कमिट गायब हो गए हैं।

मैं ग्राफिकल इंटरफ़ेस का उपयोग कर रहा हूं और मुझे विश्वास है कि यह पहली बार है जब मैंने इसे अपडेट किया है।

मैं अनिश्चित हूं कि अपने कमिट को वापस लेने के बारे में मुझे क्या करना है।

जब मैं टाइप करता हूँ

git log 

मुझे प्राप्त हुआ

घातक: खराब डिफ़ॉल्ट संशोधन 'हेड'

अद्यतन
को देखने के बाद /programming/1545407/recovering-broken-git-repository मैं करने की कोशिश की

git fsck

यह लौटा:

त्रुटि: अमान्य HEAD
घातक: ढीली वस्तु 36b7d9e1ca496bcb864c0b9c8671fcec97fbda31 (.it / obj एक्ट्स में संग्रहीत / 36 / bdd9e1ca496bcb864c0b8671fcec97fb3131)।

कमिटिंग रिटर्न:

त्रुटि: संदर्भ को हल करने में असमर्थ HEAD: ऐसी कोई फ़ाइल या निर्देशिका
घातक नहीं है: HEAD ref को लॉक नहीं किया जा सकता

और लॉगिंग मास्टर शाखा रिटर्न

$ गिट लॉग मास्टर चेतावनी: टूटे हुए रेफरी / सिर / मास्टर की अनदेखी। चेतावनी: टूटे हुए रेफरी / सिर / मास्टर की अनदेखी। घातक: अस्पष्ट तर्क 'मास्टर': अज्ञात संशोधन या काम करने वाले पेड़ में नहीं। संशोधन से पथों को अलग करने के लिए '-' का उपयोग करें

बीमार सिर्फ उन चीजों को चिपकाते रहते हैं जो प्रासंगिक हो सकती हैं

$ गिट रिफ्लॉग मास्टर
चेतावनी: टूटे हुए रेफरी / सिर / मास्टर की अनदेखी करना।
चेतावनी: टूटे हुए रेफरी / सिर / मास्टर की अनदेखी।
घातक: अस्पष्ट तर्क 'मास्टर': अज्ञात संशोधन या काम करने वाले पेड़ में नहीं।
संशोधन से पथों को अलग करने के लिए '-' का उपयोग करें

संभवतः अधिक उपयोगी जानकारी: हर बार जब मैं भ्रष्ट फ़ाइल को हटाता हूं तो कोई दूसरा स्थान लेता है। Im अपनी गलत शाखा या कुछ और इशारा करते हुए मास्टर शाखा के साथ कुछ करने के लिए सोचने लगा। क्योंकि मुझे लगता है कि सिर गुरु की ओर इशारा कर रहा है।

एक दिन बाद:
तो मुझे इस पर अपना साथी मिल गया, वह लॉग से गुजरने में सक्षम था और उसने कहा कि लॉग में मौजूद राख फोल्डर में ऑब्जेक्ट्स से मेल नहीं खाती। उन्होंने लॉग या कुछ इस तरह से मास्टर शाखा को रीसेट करने की कोशिश की, मैं थोड़ा खो गया। आशा है कि मददगार



1
@heavyd कृपया अपडेट की जांच करें
MrJD

जवाबों:


3

रिपॉजिटरी मौजूद है, लेकिन मेरे सभी कमिट गायब हो गए हैं।

वास्तव में आप का अर्थ क्या है? क्या काम करने वाला पेड़ अभी भी है? है .git/मौजूद हैं? क्या इसमें कोई फाइलें हैं?

आपके द्वारा पोस्ट किए गए संदेश बताते हैं कि फ़ाइल .git/HEADमौजूद नहीं है। यह काम करने वाले पेड़ की अपेक्षित स्थिति (जो आपने बाहर की जाँच की थी) को परिभाषित करता है। यदि वह फ़ाइल चली गई है, तो समझ में नहीं आता कि आप कहां थे।

आप इस सामग्री के साथ, फ़ाइल बनाने की कोशिश कर सकते हैं: ref: refs/heads/master

यदि आप एक अलग शाखा पर थे, तो बस "मास्टर" को शाखा नाम से बदल दें। यदि आप एक शाखा पर नहीं थे, तो यह अधिक जटिल होगा।

.git/logs/HEADनीचे की लाइनों के साथ HEAD के पिछले राज्यों को रिकॉर्ड करता है। यह उदाहरण पंक्ति एक चेकआउट दिखाती है: 25f2a6099fb5f9f2192a510c42f704f9fc4bcecb 65abb1a3dc102e2498860f01fb179cda4c51decb Rainer Blome <rainer.blome@wherever.you.are.com> 1346938344 +0200 checkout: moving from master to MySuperBranch

सामने SHA1s कमिट्स को संदर्भित करता है। उदाहरण के लिए, आपको इन्हें शाखा लॉग में खोजने में सक्षम होना चाहिए .git/logs/refs/heads/master

आपके द्वारा दिया गया git reflog आउटपुट जैसा दिखता है वैसा refs/heads/masterही गायब है। इसकी एकमात्र सामग्री को इस पर नवीनतम कमेटी (और एक नई पंक्ति) का SHA1 माना जाता है। आप उदाहरण के लिए, शाखा लॉग के अंत में नवीनतम SHA1 पा सकते हैं .git/logs/refs/heads/master


2

यदि .git / HEAD मौजूद है और इसकी सामग्री ref: refs/heads/masterतब फ़ाइल refs / हेड / मास्टर की जांच करती है, तो इसमें अंतिम कमिट का sha1 होना चाहिए।

यदि वह फ़ाइल दूषित हो गई थी और NULL वर्णों से भरी हुई थी, तो उस फ़ाइल को संपादित करें और .git/logs/HEADअंतिम प्रतिबद्ध से पहले या उससे पहले की नवीनतम प्रतिबद्ध की sha1 डालें ।

फिर करो git reset --hard 'sha1 of the commit that you selected'


यह वास्तव में NULL वर्णों से भरा हुआ था इसलिए मैंने पिछली कमेटी के sha1 में डाल दिया, लेकिन फिर git रीसेट करने से "त्रुटि: update_ref 'रेफरी के लिए विफल हो गया "
काल्पनिक

1

ऐसा लगता है कि आपका रेपो दूषित हो गया है। सबसे आसान काम यह होगा कि आप अपने रेपो को बैकअप से पुनर्प्राप्त करें या रेपो को मूल स्रोत से पुनः प्राप्त करें (यह मानते हुए कि आपके पास रेपो में टन का काम नहीं था)।

यदि रिसॉटिंग / क्लोनिंग एक विकल्प नहीं है, तो मैं प्रो गिट (मुफ्त ऑनलाइन पुस्तक या पेपर संस्करण ) के माध्यम से पढ़ने की सलाह दूंगा । पूरी किताब बहुत जानकारीपूर्ण है, लेकिन विशेष रूप से पिछले अध्याय पर एक नज़र डालें कि कैसे आंतरिक रूप से काम करता है। एक बार जब आप समझ जाते हैं कि Git कैसे काम करता है, तो भ्रष्ट वस्तुओं को पुनर्प्राप्त करने के बारे में Linus के निर्देशों पर एक नज़र डालें ।


इसलिए, दुख की बात है कि मैं छिपी हुई फाइलों का समर्थन नहीं कर रहा था, .it छिपा हुआ था। मेरे पास वास्तव में पूरी किताब पढ़ने के लिए पर्याप्त समय नहीं है, क्या आपको लगता है कि मैं प्रयास कर सकता हूं?
MrJD

"इंटर्नल के बारे में एक पुस्तक पढ़ें" ध्वनि सामान्य सलाह हो सकती है, लेकिन यह विशिष्ट समस्या और हाथ पर प्रश्न को संबोधित करने में मदद नहीं करती है।
बुरहान अली

0

थोड़ी देर के लिए वेब पर सर्फ करने के बाद, मैंने आखिरकार यह पाया और यह काम किया।

git fetch origin
git reset --hard origin/master

इससे कोई परिवर्तन होता है origin(उम्मीद है कि स्थानीय स्तर पर बहुत अधिक काम नहीं हुआ है), और फिर स्थानीय masterशाखा को रिमोट से सहमत होने के लिए मजबूर करता है । सावधान, का --resetअर्थ है किसी भी स्थानीय परिवर्तन को त्यागना ! इसके अलावा, अगर यह बहुत टूटा हुआ नहीं था, तो बस शाखा git reset origin/masterके अंतिम ज्ञात (चेक इन) स्थिति को बहाल कर दिया होगा master
वॉनब्रांड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.