Git में अनाथ ब्राउज़ करें


102

मेरा गिट रिपॉजिटरी किसी भी तरह से जीत गया है - मैंने आज सुबह msysgit को लोड किया और वर्तमान निर्देशिका के बाद दिखाए जाने वाले शाखा नाम के बजाय, यह "((रेफ: फिर से ...))", "गिट स्थिति 'रिपोर्ट को सब कुछ के रूप में बताता है नई फ़ाइल, 'git लॉग' और 'git reflog' मुझे "घातक: खराब डिफ़ॉल्ट संशोधन 'HEAD" बताएं, और इसी तरह।

'Git reflog --all' या 'gitk --all' करने से मुझे पता चलता है कि बाकी रिपॉजिटरी बरकरार है, लेकिन ऐसा लगता है कि जिस शाखा पर मैं काम कर रहा था वह अभी गायब हो गई है, जो बताती है कि HEAD का अस्तित्व क्यों नहीं है / किसी भी बात की ओर इशारा करना।

मुझे पता है कि जीआईटी सभी तरह की जानकारी रखता है, और मैं मान रहा हूं कि मेरे कमिट्स किसी तरह अनाथ हो गए हैं, तो क्या कुछ कमांड है जो मुझे उन कमिट्स को दिखाएगा ताकि मैं उन्हें हेड को रीसेट कर सकूं?

संपादित करें: ओह प्रिय। मैंने 'git fsck', और 'git fsck --full' रिपोर्ट्स की खोज की "घातक: वस्तु 03ca4 ... दूषित है"। उस बारे में मैं क्या शैतान कर सकता हूँ?

संपादित करें: ओह प्रिय ओह प्रिय। मैंने एक और शाखा की जाँच की, फिर 'git checkout -b Lostbranchname' का उपयोग करके उसी नाम से मूल शाखा को फिर से बनाने की कोशिश की, और git का कहना है कि "त्रुटि: संदर्भ refs / हेड्स / Lostbranchname को हल करने में असमर्थ: कोई त्रुटि नहीं, घातक: विफल अद्यतन के लिए रेफरी लॉक करने के लिए: कोई त्रुटि नहीं "। 'नो एरर' विशेष रूप से गंदा त्रुटि होनी चाहिए। तो ऐसा लगता है कि यह अभी भी चारों ओर लटका हुआ है, लेकिन इसका उपयोग करने में असमर्थ है और मारे जाने में असमर्थ है।

संपादित करें: सुपर डुपर ओह प्रिय। मैंने यहां बताए अनुसार चीजों को अनपैक करने और फिर से तैयार करने और बदलने का काम किया है: हार्ड डिस्क की विफलता से क्षतिग्रस्त वस्तुओं को कैसे पुनर्प्राप्त किया जाए? , लेकिन अब मैं एक और हैश को 'भ्रष्ट होने की स्थिति' के रूप में कुछ के लिए भ्रष्ट होने की सूचना दे रहा हूं। मुझे लगता है कि पूरी बात ठीक है। Git की प्यारी और सभी, लेकिन मुझे इस तरह की चीज़ से नहीं निपटना चाहिए।


के बारे में git checkout -b lostbranchname- यदि आप केवल शाखा के नाम (इसके बारे में नहीं) के बारे में परवाह करते हैं, तो आप मैन्युअल रूप से हटा सकते हैं (या नाम बदल सकते हैं) .git/refs/heads/lostbranchname- जो कि उम्मीद है कि ट्रिक करेगा।
एंटनी हैचिन्स

1
और आप एक अपस्ट्रीम नहीं है जहां आप इस git फ़ोल्डर को धक्का देते हैं?
लक्ष्मण प्रसाद

1
अफसोस की बात है, यह वास्तव में एक अवर स्रोत नियंत्रण प्रणाली के लिए एक सरोगेट रिपॉजिटरी की तरह है, मैं इसे अन्य सिस्टम की परेशानी के बिना सभी git की विशेषताओं और बारीकियों को प्राप्त करने के लिए स्थानीय रूप से उपयोग कर रहा हूं। लेकिन कम से कम दूसरी प्रणाली बेतरतीब ढंग से खुद को भ्रष्ट नहीं करती है। फिर भी, इसका मतलब है कि मैंने जो कुछ खोया है वह मेरे बदलाव हैं क्योंकि मैंने आखिरी बार दूसरी प्रणाली की जांच की थी, जिसे मैंने पहले ही पुनर्प्राप्त कर लिया है। एक ताजा भंडार शुरू करने का समय!
बेन हाइमर

7
मैं यह कहने में संकोच करूंगा कि git ने आपको "इस तरह की चीज़ से निपटने के लिए" बनाया है या यह स्वयं भ्रष्ट हो गया है। डेटा हानि के खिलाफ बैकअप के अलावा कुछ भी पूरी तरह से स्थिर नहीं हो सकता है।
कैस्केबेल

1
मैं वास्तव में जानता हूं, मैं बस (स्वाभाविक रूप से) थोड़ा संभल गया हूं कि मैंने अपना सुंदर इतिहास खो दिया है। यह गिट की गलती नहीं है, कोई भी अन्य सिस्टम समान फ़ाइल सिस्टम त्रुटियों का व्यवहार करेगा।
बेन हाइमर

जवाबों:


135

इस खुले को छोड़ने के बजाय मुझे लगता है कि मैं अपने सवाल का जवाब दूंगा। का उपयोग करना git reflog --allअनाथ आवागमन को ब्राउज़ करने का एक अच्छा तरीका है - और SHA1 हैश का उपयोग करके आप इतिहास को फिर से संगठित कर सकते हैं।

मेरे मामले में, हालांकि रिपॉजिटरी भ्रष्ट हो गई थी, इसलिए इससे कोई मदद नहीं मिली; git fsckआपको खोजने और कभी-कभी रिपॉजिटरी में त्रुटियों को ठीक करने में मदद कर सकता है।


3
धन्यवाद। यह एकमात्र ऐसी जगह है जो मुझे यह जानकारी मिली जब जीथब पर एक अनाथ पुल अनुरोध को खींचने की कोशिश की गई। मेरी समस्या का समाधान किया।
सिस्टमपारॉक्स

6
अगर कोई भी सभी को gitk में चाहेगा: [alias] orphank = !gitk --all --date-order ``git reflog | cut -c1-7``&(संपादित करें: उन डबल बैकटिक्स की कल्पना करें जहां एकल - भागने से यहां काम नहीं लगता)
mbx

1
बहुत बढ़िया टिप @mbx! अनाथ के बीच संबंधों को रेखांकन के साथ देखने में सक्षम होने के लिए बहुत उपयोगी है!
बेन हाइमर

अगर हम "रिबेस / स्क्वैश" जैसे प्रतिबद्ध संबंधों के लिए भी बिंदीदार रेखाएं प्राप्त कर सकते हैं, तो @BHHymers कूल होंगे। मुझे अभी तक ऐसा करने का कोई तरीका नहीं मिला है।
mbx

जब मैंने ऊपर उत्तर लिखा था, तो मुझे इसके बारे में पता नहीं था। यह एक ऐसा उपयोगी उपकरण है!
जामे हिक्स

17

Git 2.9.x / 2.10 (Q3 2016) के साथ, आपको git reflog --allअब और उपयोग नहीं करना git reflogहोगा , पर्याप्त होगा।

SZEDER गैबर ( ) द्वारा प्रतिबद्ध 71abeb7 (03 जून 2016) देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 7,949,837 , 06 जुला 2016)szeder
gitster

reflog: reflogपिछले रूट कमिट्स पर चलना जारी रखें

यदि एक रिपॉजिटरी में एक से अधिक रूट कमिट होते हैं, तो इसके HEAD रिफ्लॉग में कई "क्रिएशन इवेंट्स" हो सकते हैं, अर्थात ऐसी प्रविष्टियाँ जिनके "वैल्यू" से null sha1 है।
इस तरह के रिफ्लॉग को सूचीबद्ध करना वर्तमान में समय से पहले इस तरह की प्रविष्टि पर रुक जाता है, तब भी जब रिफ्लॉग में अभी भी पुरानी प्रविष्टियाँ होती हैं।
यह उपयोगकर्ताओं को यह सोचकर डरा सकता है कि ' git checkout --orphan' के बाद उनका रिफ्लॉग हो गया ।

पूर्ववर्ती रिफ्लग प्रविष्टि के "नए" मान के आधार पर इस तरह के निर्माण की घटनाओं के पिछले भाग को फिर से जारी रखें।


4

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

मुझे आशा है कि आपने इस रिपॉजिटरी की सामग्री को किसी अन्य मशीन पर धकेल दिया है या आपके पास भ्रष्ट भागों को पुनर्प्राप्त करने के लिए बैकअप है।

मुझे खिड़कियों पर गिट के साथ कोई अनुभव नहीं है लेकिन लिनक्स या ओएस एक्स पर गिट के साथ इस तरह का व्यवहार कभी नहीं देखा है।


3

मैं आमतौर पर git reflogआउटपुट को भ्रामक पाता हूं । मेरे लिए कमिट ग्राफ समझना बहुत आसान है git log --graph --reflog। केवल प्रतिबद्ध सारांश दिखाने के लिए प्रारूप को ओवरराइड करने से ग्राफ़ का अनुसरण करना आसान हो सकता है:

$ git alias graph "log --graph --all --format='%h %s%n        (%an, %ar)%d' --abbrev-commit
$ git graph --reflog

* f06abeb Add feature
|         (Sue Dakota, 4 days ago) (HEAD -> master)
* f126291 Fix the build
|         (Oski M. Wizard, 5 days ago) (origin/master, master)
* 3c4fb9c Break the build
|         (Alyssa P. Hacker, 5 days ago)
| * e3124bf fixup! More work for feature
| |         (Sue Dakota, 4 days ago)
| | * 6a7a52e Lost commit
| |/          (Sue Dakota, 4 days ago)
| * 69d9438 More work for feature
| |         (Sue Dakota, 2 weeks ago)
| * 8f69aba Initial work for feature
|/          (Sue Dakota, 3 weeks ago)
* d824fa9 Fix warnings from the linter
|         (Theo Ristudent, 4 weeks ago)
* 9f782b8 Fix tests flakes
|         (Tess Driven, 5 weeks ago)

उस से यह स्पष्ट है कि e3124bfऔर 6a7a52eअनाथ अनाथ हैं, और उनके पूर्वजों से संदर्भ है।


अभी-अभी मेरे खोये हुए काम के घंटे बचे हैं! गलती से एक स्थानीय शाखा को हटा दिया गया था जो उस पर अप्रकाशित थी, git reflog --allउन्हें नहीं दिखाती है, क्योंकि git log --graph --reflogवे बहुत दृश्यमान थे ...
एडम।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.