चेतावनी: दूरस्थ HEAD किसी भी संदर्भ को संदर्भित नहीं करता है, चेकआउट करने में असमर्थ है


86

यह विभिन्न कारणों के लिए एक लोकप्रिय त्रुटि की तरह लगता है।

मुझे "kiflea.git" नामक एक साधारण नंगे गिट रेपो मिला है, मैं इसे इस तरह से क्लोन करता हूं:

git clone git://kipdola.be/kiflea.git

फिर मुझे बताता है: warning: remote HEAD refers to nonexistent ref, unable to checkout.

और हाँ, .गित निर्देशिका को छोड़कर, नक्शे में कोई संस्करण फ़ाइलें नहीं हैं। वैसे भी, केवल एक चीज जो मुझे करने की ज़रूरत है:

cd kiflea
git checkout master

और यह काम करता है, सभी फाइलें हैं। लेकिन मैंने सोचा कि एक रेपो क्लोनिंग स्वचालित रूप से मास्टर की जांच करता है, इसलिए वास्तव में क्या चल रहा है, और मैं इसे कैसे ठीक करूं?

मैंने देखा है कि, मैं git checkout masterथोड़ा करने के बाद , यह मेरे स्थानीय .git config फाइल में जुड़ जाता है:

[branch "master"]
    remote = origin
    merge = refs/heads/master

शायद यह जानना दिलचस्प है कि इस git रिपॉजिटरी एक दूर के अतीत में svn रिपॉजिटरी हुआ करती थी।

Ps: जब gitweb का उपयोग करके नंगे रिपॉजिटरी को ब्राउज़ करते हैं, तो स्पष्ट रूप से masterवहां एक शाखा होती है: http://kipdola.be/gitweb/?p=kiflea.git/a=summary


2
क्या git ls-remote originदिखाता है आपको?
सीबी बेली

यह checkout masterबिट से पहले या बाद में समान है :25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
skerit

1
ऐसा लगता है कि रिमोट रिपॉजिटरी ने खो दिया है (या कभी नहीं) इसका HEAD। क्या आपके पास इसकी सीधी पहुंच है? यदि हां, तो यहाँ
CB Bailey

1
यदि आप एक रिपॉजिटरी क्लोन करते हैं और शाखा निर्दिष्ट नहीं करते हैं, तो यह रिमोट हेड का उपयोग करने की कोशिश करता है। जैसा कि उत्तर में नीचे बताया गया है, आप सीधे किस शाखा को प्रभावित नहीं कर सकते। हालाँकि क्लोन समय पर एक अलग शाखा की जाँच करके, आप इस जाँच से बचते हैं। आपके मामले में ऐसा लगता है कि मास्टर मौजूद है, लेकिन सुदूर सिर कहीं और git clone -b master <url> <dir>
इशारा

जवाबों:


125

warning: remote HEAD refers to nonexistent ref, unable to checkout.साधन रिमोट (नंगे) भंडार कहा जाता है फ़ाइल में शाखा संदर्भ है कि HEADहै कि एक ही भंडार में किसी भी प्रकाशित शाखा से मेल नहीं खाता।

ध्यान दें कि चेतावनी का अर्थ केवल यह है कि git ने चेकआउट नहीं किया था। क्लोन रिपोजिटरी अन्यथा ठीक है। बस git branch -aसंभव शाखाओं को देखने और git checkout the-branch-you-wantसमस्या को हल करने के लिए करते हैं।

यह आमतौर पर होता है क्योंकि उस फ़ाइल के लिए डिफ़ॉल्ट सामग्री ( .git/HEADया HEADनंगे रिपॉजिटरी के लिए सादे ) ref: refs/heads/masterजो कहती है कि यदि कोई cloneइस रिपॉजिटरी में जा रहा है, तो उन्हें डिफ़ॉल्ट रूप से शाखा को क्लोन करना चाहिए refs/heads/master। डिफ़ॉल्ट रूप से Git refs/heads/उपसर्ग के बिना स्थानीय शाखा बनाएगा (जो कि masterडिफ़ॉल्ट रूप से है)। git help symbolic-refअधिक जानकारी के लिए प्रयास करें ।

इस स्थिति के साथ समस्या यह है कि Git दूरस्थ प्रतीकात्मक refs को संशोधित करने के लिए एक विधि प्रदान नहीं करता है इसलिए या तो आप कुछ का उपयोग करें जिसे Git होस्टिंग प्रदाता ने कार्यान्वित किया है (जैसे सेटिंग्स - GitHub में डिफ़ॉल्ट शाखा यदि आपके पास व्यवस्थापक अधिकार हैं) या आपको नाम का उपयोग करना है masterडिफ़ॉल्ट शाखा के रूप में (क्योंकि यह उस प्रतीकात्मक रेफ के लिए डिफ़ॉल्ट मान है)।

आप अपने रिमोट Git रेपो के लिए खोल उपयोग कर सकते है, तो आप बस कर सकते हैं cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZजहां XYZशाखा का नाम आप डिफ़ॉल्ट रूप से उपयोग करना चाहते हैं।

इस मुद्दे को हिट करने का एक तरीका यह है कि बिना किसी कमिट के एक नया रिमोट नंगे रेपो बनाया जाए और फिर ऐसा किया जाए git push name-of-the-remote my-special-branch-nameजिसके परिणामस्वरूप नंगे रिपॉजिटरी में एक ही ब्रांच होगी, my-special-branch-nameलेकिन HEADप्रतीकात्मक रेफरी में अभी भी डिफ़ॉल्ट मान होता है master। परिणामस्वरूप, आपको उपरोक्त चेतावनी मिलेगी।


20
ध्यान दें कि चेतावनी का अर्थ केवल यह है कि git ने ऐसा नहीं किया checkout। क्लोन रिपोजिटरी अन्यथा ठीक है। क्या git branch -aसंभव शाखाओं और देखने के लिए git checkout the-branch-you-wantकरने के लिए "ठीक" मुद्दा।
मिको रानाल्टेन ने

2
उपयोग करते समय कम से कम एक व्यक्ति दूरस्थ सिर का उपयोग करने से बच सकता है git clone -b master(या जो भी मौजूदा शाखा का नाम है)।
eckes

मैंने वही किया है जो आपने पिछले पैराग्राफ में लिखा था; नंगे रेपो (गीतालाब के भीतर) में शाखा में फाइलें हैं लेकिन क्लोन खाली लगता है। {git Branch -a} कुछ नहीं दिखाता है। {git क्लोन -b माय-स्पेशल-ब्रांच-नेम <url>} या तो काम नहीं करता है (रिमोट एंड अप डाउन)।
एड रैंडल

मैं refs / remotes / my-special-branch-name को refs / heads और edit HEAD को मिलान करने के लिए (नंगे गीतालाब रेपो में) कॉपी करके "निश्चित" करता हूँ। मैं तब-बी-विशेष-शाखा-नाम का सफलतापूर्वक उपयोग कर सकता था। लेकिन "इनिट" / "पुश" चक्र के बाद नंगे खाली रेपो को कॉन्फ़िगर करने का सही तरीका क्या है ताकि क्लोन-बी समस्या का सामना न करें?
एड रैंडल

1
@EdRandall cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZजहां XYZअगर डिफ़ॉल्ट शाखा का नाम आप चाहते हैं इस्तेमाल किया जा रहा git cloneबिना किया जाता है -bझंडा। यदि आपको कुछ और समस्या है, तो कृपया टिप्पणी के रूप में प्रश्न जोड़ने के बजाय एक नया प्रश्न पूछें।
मिक्को रेंटालीनें

10

मेरे पास एक ही मुद्दा था क्योंकि मैं अब masterशाखा का उपयोग नहीं कर रहा था और यह मेरे स्थानीय और दूरस्थ भंडार दोनों में खो गया।

रिमोट रिपॉजिटरी के पास अभी भी HEADसेट था master, मैंने इसे रिमोट ब्रांच में बदल दिया है जिसका मैं वास्तव में उपयोग करता हूं और सब कुछ ठीक काम करता है।

यदि आप अपने दूरस्थ भंडार तक पहुँच सकते हैं:

  • अपने पास जाओ remote_repo.git;
  • HEADफ़ाइल संपादित करें
  • बदलें ref: refs/heads/masterकरने के लिएref: refs/heads/your_branch

दोनों स्थितियां संभव हैं, मास्टर को हटा दिया गया था और हेड अभी भी इसे इंगित करता है या हेड को एक शाखा में बदल दिया गया था जिसे बाद में हटा दिया गया था। मुझे लगता है (मास्टर कार्यों के चेकआउट के बाद से) दूसरा विकल्प हमारा मामला है। @MarcoBonifazi उस स्थिति में "परिवर्तन" के broken_branchसाथ प्रतिस्थापित करना होगा refs/heads/master
ckes

2
फ़ाइलों को संपादित करने का सहारा लिए बिना इस तरह HEAD शाखा को सेट करने का एक "उचित" तरीका है?
एड रैंडल

@EdRandall cd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZजहां XYZअगर डिफ़ॉल्ट शाखा का नाम आप चाहते हैं इस्तेमाल किया जा रहा git cloneबिना किया जाता है -b, ध्वज के रूप में मैं एक और टिप्पणी में कहा।
मिक्को रेंटालीनें

7

हाँ यह आपके git क्लोन से संबंधित है जो मास्टर से भिन्न शाखा की जाँच करने का प्रयास कर रहा है। बस यह करो

git clone user@git-server:project_name.git -b branch_name /some/folder

यह आपको इसके शाखा नाम के माध्यम से सटीक शाखा का क्लोन बनाने में मदद करेगा।


2

भले ही यह त्रुटि प्रदर्शित की गई थी - मेरी परियोजना अभी भी संबंधित रिपॉजिटरी से जुड़ी हुई थी - मैंने git branchकमांड चलाया और उपयुक्त शाखाओं को देखा - फिर मैं चला गया git checkout *branchnameऔर BOOM - सब ठीक था।


हां, @ मिक्को ने इसे समझाया कि इसका कारण क्या है। यदि आप चेकआउट को छोड़ना चाहते हैं, तो आप -b विकल्प का उपयोग कर सकते हैं। (लेकिन लंबे समय में अपने रिमोट रेपो को ठीक करना बेहतर है!)
eckes

1

आपके दूरस्थ रिपॉजिटरी में निश्चित रूप से कुछ गड़बड़ है। आप रिपॉजिटरी का एक नया क्लोन बनाकर इसे ठीक करने में सक्षम हो सकते हैं। इसके अलावा, मास्टर शाखा के लिए एक नई प्रतिबद्धता को आगे बढ़ाने से भी काम हो सकता है।


मुझे लगता है कि आपका मतलब है: "git धक्का -उ उत्पत्ति HEAD: HEAD" यह मेरे लिए कुछ भी हल नहीं किया ...
RzR

1

मुझे लगता है कि यह *कमिट लॉग में अग्रणी है जो किसी तरह रिमोट सर्वर को बेवकूफ बना रहा है।

मैं कुछ मेनू लिंक का उपयोग करके रेपो के वेब इंटरफ़ेस के आसपास ब्राउज़ कर सकता हूं, लेकिन अन्य 404 - Unknown commit objectविशेष रूप से सारांश पृष्ठ से या इसके साथ विफल होते हैं ।

देखें कि क्या आप उस अंतिम प्रतिबद्ध संदेश में संशोधन कर सकते हैं और फिर अपडेट को बलपूर्वक यह देखने के लिए दबा सकते हैं कि क्या यह ठीक करता है। सर्वर दानव में एक बग हो सकता है। यदि यह इसे ठीक करता है तो यह git सूची git@vger.kernel.org (केवल सामान्य पाठ संदेश) पर रिपोर्ट करने लायक होगा


1

नंगे रेपो बनाते समय मेरे पास एक ही मुद्दा था।

मैंने इसे सिर्फ रेपो क्लोनिंग के लिए हल किया, एक स्थानीय मास्टर शाखा का निर्माण किया और फिर मास्टर को रिमोट रेपो में धकेल दिया।

1) रेपो का क्लोन

$ git.exe clone --progress -v "the remote path" "my local path"

2) स्थानीय स्तर पर एक मास्टर शाखा बनाएं।

   $ git checkout -b master

३) स्थानीय शाखा में कुछ करना

$ git add readme.md 
$ git commit –m “Added readme”

4) रिमोट पर स्थानीय मास्टर धक्का

   $ git push origin master

0

यदि वास्तव में कोई मास्टर शाखा उपलब्ध नहीं है, तो निम्नलिखित की जांच करें; यदि '.git' फ़ोल्डर के अंदर 'पैक-रेफ्स' नामक एक फाइल है, तो इसे खोलें और आप सूचीबद्ध सभी संदर्भ पा सकते हैं।

नीचे जैसा कुछ है;

# pack-refs with: peeled fully-peeled 
e7cc58650190bd28599d81917f1706445d3c6d8b refs/tags/afw-test-harness-1.5
^cfae4f034e82591afdf4e5ed72279297d0eee618
6afe1bcfa4bd74de8e0c8f64d024e1cc289206df refs/tags/afw-test-harness-2.1
^c32f7fa495d4b44652f46c065fcd19c3acd237a6
72f2e4284dfbf27c82967da096c6664646bbdd19 refs/tags/android-1.6_r1
^50992e805e758e2231f28ec2127b57a1a9fd0ddc
0cbd528cad1cee9556098b62add993fc3b5dcc33 refs/tags/android-1.6_r1.1

फिर उपयोग करें;

git checkout refs/tags/xxxx

या

git checkout 'HASH value'

आवश्यक संस्करण की जांच करने के लिए। धन्यवाद।


0

मैं इसे ठीक करने के लिए लग रहा था:

git checkout -b  master
git push

इसने डिफ़ॉल्ट मास्टर बनाया, और फिर मैं अपनी अन्य शाखाओं की जांच कर सकता था



0

Gitlab के लिए, यहां तक ​​कि यह दिखाता है कि आप एक डिफ़ॉल्ट शाखा पर हैं (उदाहरण के लिए master) आप वास्तव में उस पर नहीं हो सकते हैं, इसे फिर से सेट कर सकते हैं, जैसे:

  1. एक नई शाखा बनाएँ, हो सकता है asd
  2. सेटिंग> रिपॉजिटरी> डिफॉल्ट ब्रांच, जो डिफॉल्ट ब्रांच दिखाता है master
  3. इसे सेट करें asd
  4. इसे वापस सेट करें master
  5. हटाएं asdशाखा

हो गया, अब आपकी डिफ़ॉल्ट शाखा है master

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