2013-08-07 5 views
6

मिला 3 काम करता है - एक उचित, और फिर दो मूर्खतापूर्ण सफाई वाले, टाइपो इत्यादि। इसलिए मैं उन्हें स्क्वैश करना चाहता हूं। दूर आग:"घातक: रेफ हेड एक प्रतीकात्मक रेफरी नहीं है" इंटरैक्टिव गिट रिबेस के दौरान

git rebase -i HEAD~3 

सरल लगता है, और यह काम करना चाहिए - मैं एक नया रेपो में, एक समस्या में चल रहा है के बाद यह कोशिश की है, और यह उम्मीद के रूप में काम करता है। संपादक 3 काम करता है, शीर्ष उठाओ, दूसरे दो squash, बचाओ और छोड़ दिया, किया। यदि मैं वर्बोज़ मोड में चलाता हूं, तो मुझे अधिक जानकारी दिखाई देती है - गिट अलग-अलग हेड स्टेट में प्रवेश करता है जिसे मैंने पहले उठाए गए 'प्रतिबद्ध' की जांच करके किया है, फिर 'रीबेजिंग 2/3' और 'रीबेजिंग 3/3' करता है, जाहिर है कि कुछ अस्थायी काम करता है रास्ते में - और फिर एक सफलता संदेश; संपादक कुछ बिंदु पर फिर से पॉप अप करता है, मुझे प्रतिबद्ध संदेश बदलने के लिए पेशकश करता है। सब अच्छा है।

लेकिन एक ही आदेश एक कार्य रेपो में मर जाता है! 3 एक संपादक, पिक-स्क्वैश-स्क्वैश में काम करता है .. लेकिन इस बार, मुझे 'रीडिंग 2/3' दिखाई नहीं देता है, इसके बजाय 'हेड अब मेरे-एसएचए -1' पर पहली पंक्ति के बाद, यह चलता है एक घातक!

HEAD is now at 48a6c3d... <commit message> 
fatal: ref HEAD is not a symbolic ref 

लेकिन क्यों Git HEAD एक प्रतीकात्मक रेफरी होने की अपेक्षा करेंगे? रीबेस प्रक्रिया हेड को अलग करती है - जैसा कि मैंने अपने अन्वेषण उदाहरण में देखा है - तो फिर इस दूसरे उदाहरण में घातक क्यों है, लेकिन पहले में नहीं? बिल्ली। जीआईटी/हेड मुझे प्रतिबद्धता के SHA1 को मैंने 'उठाया' है ...

मैंने कई घंटे पढ़ने और शोध करने में व्यतीत किया है, लेकिन कुछ ठीक नहीं है, और मुझे यह नहीं पता कि यह क्या है! मुझे संदेह है कि शायद कुछ हुक जिम्मेदार हैं (उनके बारे में कुछ पता है, और समस्याग्रस्त रेपो को कुछ पता है)। इसका उत्तर देने में आपके विचार के लिए धन्यवाद!

+1

यदि आपको लगता है कि हुक एक समस्या हो सकती है, तो क्या आपने हुक को बंद करने का प्रयास किया? वे '.git/hooks /' के अंतर्गत स्थित हैं, बस उन्हें ' .off' पर पुनर्नामित करें। विशेष रूप से एक प्री-रीबेस हुक, 'pre-rebase.sample'। –

+0

सुझाव के लिए धन्यवाद - हुक अब कुछ हद तक demystified हैं .. इस समस्या पर कोई प्रभाव नहीं पड़ा, लेकिन कम से कम एक लाल हेरिंग मारा) – alexakarpov

+1

गिट में "प्रतीकात्मक रेफरी" फाइल सिस्टम पर प्रतीकात्मक लिंक के साथ कुछ भी नहीं है: गिट parlance में "रेफरी" एक प्रतिबद्धता की ओर इशारा करते हुए एक इकाई है - एक शाखा या एक टैग; यह "संदर्भ" के लिए छोटा है। एक रेफरी सीधे प्रतिबद्धता के SHA-1 नाम (और फिर यह प्रत्यक्ष है) या * अन्य * रेफरी पर इंगित कर सकती है, और फिर यह "प्रतीकात्मक" है। उदाहरण के लिए, 'HEAD' आम तौर पर मास्टर की टिप प्रतिबद्धता के लिए' रेफ/हेड/मास्टर 'जैसी चीज़ों को इंगित करता है। – kostix

उत्तर

0

आपका "काम" रेपो शायद किसी भी तरह टूटा हुआ है। विवरण के लिए I can't git rebase --interactive anymore देखें।

मैं क्या कर रहा हूं यह जानने के लिए अपने काम रेपो में git status चलाने का प्रयास करूंगा। फिर उदा। git rebase --abort, git merge --abort या ऐसा कुछ आवश्यक हो सकता है।

मैं भी git fsck चलाऊंगा।

आपके रेपो और कामकाजी निर्देशिका के बाद जाना अच्छा है, इंटरैक्टिव रीबेस को ठीक काम करना चाहिए। यह भी ध्यान दें कि यदि आप रेपो में पहली प्रतिबद्धता को छूना चाहते हैं तो आपको git rebase --root --preserve-merges ... की आवश्यकता हो सकती है।

संबंधित मुद्दे