Git gc fatal को कैसे हैंडल करें: खराब ऑब्जेक्ट refs / remotes / मूल / HEAD त्रुटि?


131

मैं आज बेतरतीब ढंग से हिट कर रहा हूं जबकि गिट कचरा इकट्ठा करने की कोशिश कर रहा है :

$ git gc
fatal: bad object refs/remotes/origin/HEAD
error: failed to run repack

इससे मैं कैसे निपटूं?

जवाबों:


162

मुझे इसके बारे में समझ नहीं है, लेकिन जैसा कि इस धागे में सुझाया गया है , जब मैंने इसका सामना किया तो मैंने बस किया

$ mv .git/refs/remotes/origin/HEAD /tmp

(इसे बस के मामले में चारों ओर रखते हुए) और फिर

$ git gc

शिकायत किए बिना काम किया; मैं किसी भी समस्या में नहीं चला।


6
इसने मेरे लिए काम किया और मुझे लगता है कि मैं इस समस्या में पड़ गया क्योंकि मैंने डिफॉल्ट ब्रांच masterको एक से दूसरे में बदल दिया develop। दिन इससे पहले कि मैं से वापस इसे बदलने developके लिए masterऔर मैं पुराने डिफ़ॉल्ट शाखा नष्ट कर दियाdevelop , लेकिन मेरे काम कर निर्देशिका में, फ़ाइल .git/refs/remotes/origin/HEADअभी भी की ओर इशारा करते था refs/remotes/origin/developअब मौजूद नहीं है जो। इस स्थिति में फ़ाइल को निकालने से काम चल गया।
स्टावरेंगो

4
git pruneमेरे लिए काम किया, Git में जमा हुए डेटा को हटाने का एक तरीका है, लेकिन उपयोगी कुछ भी संदर्भित नहीं किया जा रहा है।
स्वेन मल्विक

उन्हें निष्पादित करने से मेरी समस्या हल हो गई:$ mv .git/refs/remotes/origin/HEAD /tmp $ git gc git prune
डेविड राका

2
मुझे संदेह है कि सबसे अच्छा तरीका होगा @ WilQu का उत्तर ( stackoverflow.com/a/49944297/660339 )। क्या कोई इसकी पुष्टि कर सकता है?
इवान पेरेज़

उन फ़ाइल को .it फ़ोल्डर से निकाल कर, git gcमेरे लिए काम करने की तुलना में
विनो

68

जिस समस्या से मैं भाग गया था (जो कि वही समस्या है जो @Stavarengo ने इस टिप्पणी में उल्लेख किया है ) यह है कि डिफ़ॉल्ट दूरस्थ शाखा ( developमेरे मामले में) को हटा दिया गया था, लेकिन अभी भी इसमें संदर्भित था.git/refs/remotes/origin/HEAD

.git/refs/remotes/origin/HEADमेरे संपादक में खुलने से यह पता चला:

ref: refs/remotes/origin/develop

मैंने इसे अपनी नई डिफ़ॉल्ट शाखा में इंगित करने के लिए सावधानीपूर्वक संपादित किया और सब कुछ ठीक था:

ref: refs/remotes/origin/master

यह क्लू मुझे परेशान कर रहा था कि रनिंग git pruneने इस त्रुटि को दिखाया:

> git prune
warning: symbolic ref is dangling: refs/remotes/origin/HEAD

1
यह मेरा फिक्स था
Dan Carlstedt

1
यह मेरा सटीक उपाय था। हमारी टीम ने हाल ही में एक डिफ़ॉल्ट शाखा विकसित करने से बदलकर मास्टर के रूप में अच्छी तरह से विकसित किया
jmancherje

40

ट्रेंटन का जवाब देखने के बाद, मैंने अपनी ओर देखा .git/refs/remotes/origin/HEAD तरफ देखा और देखा कि यह एक पुरानी शाखा की ओर भी इशारा कर रहा है जो अब हटा दी गई है।

लेकिन फ़ाइल को स्वयं संपादित करने के बजाय, मैंने रयान के समाधान की कोशिश की:

git remote set-head origin --auto

यह स्वचालित रूप से नई शाखा में फ़ाइल सेट करता है, और git gcउसके बाद ठीक काम करता है।


हां, यह मेरे लिए काम करता है - जैसा कि मैं ठीक उसी परिदृश्य में था। git remote set-head $REMOTE --autoमेरे मामले में, $ रिमोट दूरस्थ उपनाम है, न कि डिफ़ॉल्ट "मूल", क्योंकि मेरे पास कई रिमोट सेटअप हैं।
देवी

29

मैंने सोचा था कि समाधान निम्नलिखित था क्योंकि यह काम करने के लिए लग रहा था, लेकिन यह वास्तव में समस्या को हल नहीं करता है।

git remote set-head origin --auto

1
ऐसा लगता है कि इस कमांड ने मुझे उसी परेशानी से छुटकारा दिलाने में मदद की। हालाँकि, इस आदेश के बाद, मैंने भी इस्तेमाल किया git prune(जैसा कि पहले कमांड आउटपुट में सुझाया गया था), इसलिए मैं यह बताने में सक्षम नहीं हूं कि मुझे क्या मदद मिली - पहला, दूसरा, या दोनों।
15-26 पर बौरस पाइलहुन

1
git remote set-head origin --autoतय मेरे रेफरी / remotes / मूल / HEAD फ़ाइल मेरे बिना उपयोग करने के लिएgit prune
danio

मुझे इस त्रुटि का सामना करना पड़ा: error: Multiple remote HEAD branches. Please choose one explicitlyऔर git remote set-head origin mybranchदूर जाने के लिए त्रुटि प्राप्त करने के लिए (जबकि 'mybranch' शाखा को चेकआउट किया गया था) का उपयोग करना पड़ा ।
derekmx271

3
डाउनवोटिंग क्योंकि पूर्ण उत्तर नहीं है और भ्रामक हो सकता है।
क्रिश्चियन विल्मा

9

ऐसा लगता है कि आपका प्रतीकात्मक-रेफ टूट सकता है ... इसे अपनी डिफ़ॉल्ट शाखा के साथ इस तरह बदलने का प्रयास करें: उदाहरण के लिए, मेरी शाखा शाखा मास्टर है

$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/master
$ git fetch --prune
$ git gc

इसे ठीक करना चाहिए।


0

यदि आप गिट वर्कट्रीज़ का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप एक कर रहे हैं

git worktree prune

दौड़ने से पहले

git gc

मेरे पास एक वर्कट्री भ्रष्ट हो गई थी और भ्रष्ट वर्कट्री को हटाने के बाद यह चाल चली गई थी। git pruneअपने आप से काम नहीं लगता था।


0

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

एकमात्र सुधार था कार्यशील निर्देशिका को मिटा देना और रेपो रिमोट (एस) को फिर से क्लोन करना। सौभाग्य से, मैं अभी भी कुछ भी नहीं खो गया था सुनिश्चित करने के लिए अद्यतन धक्का और खींच सकता है। अभी सब ठीक है।

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