कंप्यूटर के मरने के बाद गिट रिपॉजिटरी टूट गई


93

मेरा कंप्यूटर मृत हो गया और अब मेरा एक गिट रिपॉजिटरी टूट गया है। जब मैं मास्टर को चेकआउट करने की कोशिश करता हूं तो यह मुझे बताता है:

warning: ignoring broken ref refs/heads/master.
error: Your local changes to the following files would be overwritten by checkout:
        com.vainolo.jdraw2d.releng.p2/pom.xml
Please, commit your changes or stash them before you can switch branches.
Aborting

जब मैं निष्पादित करता git stashहूं तो मुझे :

fatal: bad revision 'HEAD'
fatal: bad revision 'HEAD'
fatal: Needed a single revision
You do not have the initial commit yet

तो मै क्या कर सकता हूँ?

इसका अपडेट आउटपुट git reflog:

fatal: bad default revision 'HEAD'

बहुत आशाजनक नहीं ... का आउटपुट git fsck:

error: Invalid HEAD
Checking object directories: 100% (256/256), done.
error: unable to unpack 59551f96b4e87a1c14293c19eb548ce6fa1f196f header
error: inflateEnd: stream consistency error (no message)
fatal: loose object 59551f96b4e87a1c14293c19eb548ce6fa1f196f (stored in .git/objects/59/551f96b4e87a1c14293c19eb548ce6fa1f196f) is corrupt

क्या आप जाँच सकते हैं कि क्या .git/refs/heads/masterमौजूद है और यदि उसकी सामग्री आपकी रिपॉजिटरी का वैध कमिट हैश है (आप जाँच कर सकते हैं कि उदाहरण के लिए git show <hash>)?
प्रहार

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

सामग्री @poke का .git/refs/heads/master/एक गुच्छा के हैं^@
vainolo

@Tuxdude हां, लेकिन मेरे नवीनतम परिवर्तनों के लिए अद्यतन नहीं
vainolo

1
क्या git reflogबताता है? क्या आपने दौड़ने की कोशिश की है git fsck?
kynan

जवाबों:


171

मैं इसके माध्यम से उबरने में कामयाब रहा:

rm .git/refs/remotes/origin/HEAD
git fetch --all

मेरे मामले में ऐसा इसलिए हुआ क्योंकि मैंने कुछ स्थानीय और दूरस्थ शाखाओं को हटा दिया (किसी तरह .it / refs / remotes / मूल / HEAD फ़ाइल असंगत स्थिति में रही)। एक मौजूदा स्थानीय शाखा को इंगित करने के लिए उपर्युक्त फ़ाइल की सामग्री को बदलना (उदाहरण के लिए: refs: refs / remotes / मूल / मास्टर) ने इस समस्या को हल किया। फिर भी, उपर्युक्त दृष्टिकोण बेहतर हो सकता है क्योंकि HEAD वर्तमान शाखा में नहीं होने के लिए प्रतिबद्ध हो सकता है।
क्रिसदेव

यदि समस्या एक विशिष्ट गिट सबमॉडल की होती है, तो पहली कमांड थोड़ा बदल जाती हैrm <root repository path>/.git/modules/<path to the submodule>/refs/remotes/origin/HEAD
Gobe

1
मुझे करना था rm -rf .git/refs/remotes/origin, लेकिन यू ने मुझे सही दिशा में इशारा किया
जैक

23

टूटे हुए गिट भंडार को पुनर्प्राप्त करने में सुझाए गए चरणों का पालन करके शुरू करें :

  • जांचें कि क्या .git/refsअभी भी कुछ उपयोगी है
  • जाँच करें git reflogऔर विफल रहा है कि .git/logs/refs/heads/masterया जो भी शाखा आप पिछले थे की सामग्री
  • भागो git fsck, संभवतः --unreachableया के साथ--lost-found

यह उम्मीद है कि आपको यह पता लगाने की अनुमति देगा कि masterरेफ क्या होना चाहिए ताकि आप इसे पुनर्स्थापित कर सकें (यानी सही SHA1 को बिल्ली में .git/refs/heads/master)।

यदि कोई वस्तु उस कमिट में निहित है तो वास्तव में दूषित है आप HEADदुर्भाग्यवश अपना कमिट बहाल नहीं कर सकते । अपने काम करने वाले पेड़ और / या सूचकांक को मान लें कि आप पिछली प्रतिबद्धता के लिए git reset --soft(या असफल git reset) ए की कोशिश कर सकते हैं और फिर प्रतिबद्ध कर सकते हैं। किसी भी कार्य है कि अपने काम के पेड़ सा बदल बचें git checkout -fया git reset --hard


मैंने देखा .git/logs/refs/heads/mybranch। यह इस शाखा के लिए किसी प्रकार के इतिहास को दर्शाता है। इसके माध्यम से खुदाई करके मैंने SHAs को बाहर निकाला और उनके साथ प्रदर्शित करने का प्रयास किया git show। (प्रत्येक प्रतिबद्ध में दो SHAs हैं, मैंने लेखक के नाम के ठीक पहले दूसरा उठाया था।) अंतिम एक भ्रष्ट था, लेकिन इससे पहले वाला एक git shown हो सकता था और मैं इसके साथ धक्का देने में सक्षम था git push origin abcdef:mybranch
एड एविस

12

विंडोज 8.1 पर मौत की नीली स्क्रीन के बाद मेरे पास एक समान मुद्दा था

मेरे पास इस स्थान पर एक फ़ाइल थी ...

C:\www\<project>\.git\refs\remotes\origin\<problem-branch>

और यह खाली था जबकि इस फ़ोल्डर की अन्य शाखा फाइलों में उनके अंदर लंबे तार थे।

NB मेरे पास कोई परिवर्तन / कमिट नहीं है

  • मैंने <problem-branch>फ़ाइल का बैकअप लिया
  • फाइल डिलीट कर दी
  • git fetch --all फिर से शाखा पाने के लिए

फिर टैब ऑटो का काम फिर से शुरू हो गया


6

यदि बहुत सी संशोधित फाइलें नहीं हैं, तो मुझे लगता है कि इस समस्या को हल करने के लिए पर्याप्त तरीका है:

  1. रेपो में आपके द्वारा संशोधित फाइलों का बैकअप लें
  2. अपने मौजूदा रेपो को हटा दें
  3. इसे सर्वर से पुनः क्लोन करें
  4. स्टेप 1 से रेपो में फाइल पेस्ट करें, और git commit -a

हाँ, कोई भी फिर से क्लोनिंग के बारे में सोच भी नहीं सकता था। महान सुझाव
सेल्मन जेन

5

मैं इसे git \ refs \ heads निर्देशिका में मास्टर फ़ाइल हटाने के साथ हल करने में कामयाब रहा


इससे मदद मिली, इसने मेरी सूची से शाखा को इंटेलीज पर हटा दिया और मैंने इसे एक नई शाखा के रूप में जांचा। सौभाग्य से मैंने अपने बदलावों को आगे बढ़ाया था इसलिए वे सभी वहां थे।
OAM

4

एक गणना फ्रीज और दुर्घटना के बाद, मेरी गिट शाखा संदेश के साथ क्षतिग्रस्त हो गई थी git fatal: your current branch appears to be broken:। मैं कुछ नहीं कर सका।

git fsckउल्लेख करने के बाद कि शाखा ने ए error: Invalid HEADrefs/heads/<branch>एक था invalid sha1 pointer

यहां विकल्पों का पालन करने पर, मैंने .git/refs/heads/<branch>नोटपैड ++ संपादक में खोला , और प्रत्येक sha1 वर्ण थे NUL

सौभाग्य से मुझे केवल शाखा को दूरस्थ स्थिति में रीसेट करने की आवश्यकता थी, और वह एक बिटबकेट रेपो पर थी। मैंने रिमोट रेपो की नोक से sha1 को पकड़ा और .git/refs/heads/<branch>इसे सहेजने के लिए कॉपी किया , फिर a git reset --hard HEAD, और सब कुछ सामान्य किया।


2

मैं बेवकूफ था कि धक्का देना भूल गया और एक कमिट करते समय मेरा कंप्यूटर दुर्घटनाग्रस्त हो गया। मैं सब कुछ ठीक कर सकता था, लेकिन ओपन करके / लास्ट / रिफ / हेड /

इस फ़ाइल में शाखा के सभी आवागमन (उनके SHAs के साथ) हैं, जो मैंने पुनर्प्राप्त करने के लिए किया था:

  • एक अस्थायी फ़ोल्डर में नवीनतम परिवर्तन
  • "क्लीन स्लेट" पर जाएं
    • git checkout master
    • git reset --hard
  • लॉग में अंतिम से अंतिम प्रतिबद्ध करने के लिए चेकआउट करें
  • इस अलग सिर से एक शाखा बनाएँ
  • धक्का दें
  • नवीनतम परिवर्तनों को पुनर्स्थापित करें
  • फिर से कमिट करें

इसलिए जब आप एक गूंगा गलती करते हैं, तो आपको तुरंत काम के पूरे दिन के लिए वापस नहीं लिया जाता है :)


1

मुझे पता है कि यह बहुत देर से प्रतिक्रिया है, लेकिन मुझे यह त्रुटि मिल रही थी क्योंकि मेरे पास नहीं था origin/head। आप इसे चलाकर पता लगा सकते हैं git branch -r। यदि आपको origin/headदूरस्थ बिंदु की ओर अपना संकेत नहीं दिखाई देता है , तो आप इसे चलाकर सेट कर सकते हैं git remote set-head origin {{your branch name}}

अब git branch -rफिर से दौड़ें , और आपको कुछ इस तरह से देखना चाहिए: origin/HEAD -> origin/develop

मुझे उम्मीद है कि यह किसी और की मदद करता है जो इस मुद्दे पर चल रहा है।


1

मैं अपने मास्टर ब्रांच को चेकआउट नहीं कर सकता था क्योंकि यह त्रुटि को लॉक नहीं कर सकता था। मैंने समाप्त कर दिया: .git/refs/remotes/origin/HEAD .git/refs/remotes/origin/master

और इस git कमांड को कॉल करना:

git fetch --all

1

मुझे माफ कर दो अगर मैं किसी के बाद दोहराता हूं (मैंने सभी प्रतिक्रिया नहीं पढ़ी है)। मेरी राय में, समस्या को हल करने का सबसे सरल तरीका है .it और .id के बिना प्रोजेक्ट की प्रतिलिपि बनाना, इसे साफ़ करना, गिट से क्लोन करना, उपरोक्त निर्देशिका को छोड़कर सब कुछ हटाना और फिर पिछली कॉपी को .it और .id के साथ नव निर्मित रेपो में पेस्ट करना है। । आशा है कि यह समझ में आता है।


1

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

अपने कमांड प्रॉम्प्ट पर, मुझे यह त्रुटि मिल रही थी यहां छवि विवरण दर्ज करें

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

cd .git
cd refs
cd remotes
cd origin

वहाँ एक फ़ाइल का नाम masterहोगा, उपयोग करेंls यह देखने के लिए कि निर्देशिका में क्या है। तो बस इसे rm मास्टर का उपयोग कर हटा दें

bam, दूषित फ़ाइल चली गई है। अब अगर आप git ब्रांच कमांड -a जारी करते हैं, तो यह इसका उत्पादन करेगा

$ git branch -a
* master
  remotes/origin/master (this in red color -scary :) )

फिर इस आदेश को जारी करें, और यह आपके संदर्भों को ठीक करेगा

$ git remote set-head origin master

इसे योग करने के लिए, यदि आप रिमोट को खींचने की कोशिश करेंगे, तो इसे खाली रिमोट नाम दिखाना चाहिए जो कि तय किया गया है।

यहां छवि विवरण दर्ज करें


0

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


0

जांचें कि क्या MSWindows ने डेस्कटॉप.ini फाइलें बनाई हैं जो गिट को दोह रही हैं? यह मेरे लिए करता है। एक बार मैं उन सभी को .it निर्देशिका के सबफ़ोल्डर में हटा देता हूं तो यह काम करता है।


0

जब एंड्रॉइड स्टूडियो अचानक समाप्त हो गया (कंप्यूटर को बिजली की हानि के कारण) मुझे यही समस्या थी।

मैंने अपनी C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\heads\masterफ़ाइल की सामग्री की प्रतिलिपि बनाकर उसे हल कियाC:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\refs\remotes\origin\master

(पहले, मैं एंड्रॉइड स्टूडियो में 'फोर्स पुश' विकल्प को भी चालू कर दूंगा, लेकिन मुझे नहीं लगता कि यह एक आवश्यक कदम था।)

ध्यान दें:

मैंने अपनी C:\Users\myusername\AndroidStudioProjects\MyBrokenApp\.git\निर्देशिका में फ़ाइलों की सामग्री (inc। उपनिर्देशिका) की तुलना एक और स्वस्थ परियोजना में उन लोगों की संगत फ़ाइलों से करके इस समाधान को पाया - जैसे,C:\Users\myusername\AndroidStudioProjects\MyHealthyApp\.git\ ,।

आपके पास एक अलग फ़ाइल हो सकती है जो भ्रष्ट है, लेकिन किसी अन्य स्वस्थ प्रोजेक्ट के साथ तुलना करके, आपको जल्दी से हाजिर होना चाहिए कि क्या गलत है।

यदि आपके पास एक और स्वस्थ परियोजना नहीं है जिसमें git कॉन्फ़िगर किया गया है, तो यह उसी तरह से एक सरल बनाने के लायक हो सकता है, जिस तरह से आपने अपनी टूटी हुई परियोजना बनाई है, इसलिए जांच, तुलना और निर्धारण आदि कर सकते हैं।

PS - मेरा त्रुटि संदेश (संपादित) था: warning: ignoring broken refs/remotes/origin/master.fatal bad revision 'refs/remotes/origin/master..refs/heads/master' during executing git -c core.quotepath=false log refs/remotes/origin/master..refs/heads/master --pretty=format --encoding=UTF-8 -M --name-status -c --

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