पहले ध्यान दें कि आपका प्रश्न गलतफहमी को दर्शाता है। मूल / HEAD रिमोट पर डिफ़ॉल्ट शाखा का प्रतिनिधित्व करता है , यानी HEAD उस दूरस्थ रिपॉजिटरी में जिसे आप मूल कह रहे हैं। जब आप अपने रेपो में शाखाएँ बदलते हैं, तो आप उस पर प्रभाव नहीं डाल रहे हैं। दूरस्थ शाखाओं के लिए भी यही सच है; आपके पास masterऔर origin/masterआपके रेपो में हो सकता है , जहां दूरस्थ रिपॉजिटरी में शाखा origin/masterकी एक स्थानीय प्रतिलिपि का प्रतिनिधित्व करता masterहै।
उत्पत्ति का HEAD केवल तभी बदलेगा जब आप या कोई और वास्तव में इसे दूरस्थ रिपॉजिटरी में बदलता है , जो मूल रूप से कभी नहीं होना चाहिए - आप चाहते हैं कि डिफ़ॉल्ट शाखा स्थिर रहने के लिए एक सार्वजनिक रिपो हो, स्थिर शाखा (शायद मास्टर) पर। मूल / HEAD दूरस्थ रिपॉजिटरी में HEAD की एक स्थानीय प्रति का प्रतिनिधित्व करने वाला एक स्थानीय रेफरी है। (इसका पूरा नाम refs / remotes / उत्पत्ति / HEAD है।)
मुझे लगता है कि उपरोक्त उत्तर जो आप वास्तव में जानना चाहते थे, लेकिन आगे बढ़ने और उस प्रश्न का उत्तर देने के लिए जिसे आपने स्पष्ट रूप से पूछा है ... मूल / HEAD स्वचालित रूप से सेट होता है जब आप एक रिपॉजिटरी क्लोन करते हैं, और इसके बारे में। विचित्र रूप से, कि यह आज्ञाओं द्वारा निर्धारित नहीं है , जैसे git remote update- मुझे विश्वास है कि यह एकमात्र तरीका है यदि आप इसे मैन्युअल रूप से बदलते हैं। (परिवर्तन से मेरा अभिप्राय एक अलग शाखा से है; स्पष्ट रूप से यह उस परिवर्तन की ओर इशारा करता है यदि वह शाखा बदल जाती है, जो लाने / खींचने / दूरस्थ अद्यतन पर हो सकती है।)
संपादित करें : नीचे चर्चा की गई समस्या Git 1.8.4.3 में ठीक की गई थी ; इस अद्यतन को देखें ।
हालांकि, एक छोटा कैवेट है। HEAD एक प्रतीकात्मक रेफ है, जो सीधे तौर पर कमिट करने के बजाय एक ब्रांच की ओर इशारा करता है, लेकिन git रिमोट ट्रांसफर प्रोटोकॉल केवल रिपोर्ट ही refs के लिए शुरू होता है। तो जीआईटी को एचएएडी और अन्य सभी रिफ द्वारा बताए गए कमेटी के एसएचए 1 का पता है; इसके बाद उसी शाखा को खोजने के लिए HEAD के मूल्य को कम करना पड़ता है जो एक ही प्रतिबद्ध की ओर इशारा करता है। इसका मतलब यह है कि अगर दो शाखाएँ वहाँ इंगित करती हैं, तो यह अस्पष्ट है। (मेरा मानना है कि यदि यह संभव हो तो गुरु को चुनता है, फिर पहले वर्णानुक्रम में वापस आता है।) आप इसे आउटपुट में रिपोर्ट करेंगे git remote show origin:
$ git remote show origin
* remote origin
Fetch URL: ...
Push URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
foo
master
अजीब तरह से, हालांकि इस तरह से मुद्रित हेड की धारणा बदल जाएगी यदि रिमोट पर चीजें बदल जाती हैं (जैसे कि अगर फू को हटा दिया जाता है), तो यह वास्तव में अपडेट नहीं करता है refs/remotes/origin/HEAD। यह वास्तव में विषम परिस्थितियों को जन्म दे सकता है। यह कहें कि उपरोक्त उदाहरण में उत्पत्ति / HEAD वास्तव में धूआं करने के लिए इंगित किया गया था, और मूल की फू शाखा को हटा दिया गया था। हम फिर ऐसा कर सकते हैं:
$ git remote show origin
...
HEAD branch: master
$ git symbolic-ref refs/remotes/origin/HEAD
refs/remotes/origin/foo
$ git remote update --prune origin
Fetching origin
x [deleted] (none) -> origin/foo
(refs/remotes/origin/HEAD has become dangling)
इसलिए भले ही रिमोट शो जानता है कि हेड मास्टर है, यह कुछ भी अपडेट नहीं करता है। बासी फू शाखा को सही ढंग से काट दिया जाता है, और HEAD झूलने लगता है (एक नॉनवेज शाखा की ओर इशारा करते हुए), और यह अभी भी इसे मास्टर को इंगित करने के लिए अपडेट नहीं करता है। यदि आप इसे ठीक करना चाहते हैं, तो उपयोग करें git remote set-head origin -a, जो स्वचालित रूप से ऊपर के रूप में उत्पत्ति के HEAD को निर्धारित करता है, और फिर वास्तव में उपयुक्त दूरस्थ शाखा को इंगित करने के लिए उत्पत्ति / HEAD सेट करता है।
refs/origin/HEAD। यह इस बारे में नहीं है कि एक रिपॉजिटरी का अपना प्रतीकात्मक संदर्भ कैसेHEADसेट हो जाता है।