हेड और मास्टर के बीच अंतर


188

Git में HEADऔर masterमें क्या अंतर है ?

मैंने GitHub पर एक परियोजना का एक क्लोन किया और अपने परिवर्तनों को रिमोट पर धकेलना चाहता हूं। लेकिन मुझे किस पर धक्का देना चाहिए?

स्क्रीनशॉट

जवाबों:


162

masterएक शाखा के अंत के लिए एक संदर्भ है। सम्मेलन (और डिफ़ॉल्ट रूप से) यह आमतौर पर मुख्य एकीकरण शाखा है, लेकिन यह होना जरूरी नहीं है।

HEADवास्तव में एक विशेष प्रकार का संदर्भ है जो दूसरे संदर्भ को इंगित करता है। यह इंगित कर सकता है master या यह नहीं हो सकता है (यह वर्तमान में जाँच की जाने वाली शाखा को इंगित करेगा)। यदि आप जानते हैं कि आप masterशाखा के लिए प्रतिबद्ध होना चाहते हैं तो इसे आगे बढ़ाएँ।

यहाँ एक दृश्य उदाहरण है:

वैकल्पिक शब्द

अपने स्वयं के भंडार पर आप यह जाँच कर सकते हैं कि HEADइसे चलाने का संकेत कहां है:

$ git symbolic-ref HEAD
refs/heads/master

हालाँकि, यह पता लगाना कि कहाँ remotes/origin/HEADइशारा करना अधिक मुश्किल है क्योंकि यह रिमोट मशीन पर है।

यहाँ संदर्भ संदर्भ पर एक महान ट्यूटोरियल है:

http://people.gnome.org/~federico/news-2008-11.html#pushing-and-pulling-with-git-1


1
+1 खदान से ज्यादा सटीक जवाब। उन अवधारणाओं के इर्द-गिर्द चित्रण के लिए भी stackoverflow.com/questions/3301956/… और stackoverflow.com/questions/3301956/… देखें ।
VONC

37

इसका सरल उत्तर यह है कि HEADजिस शाखा में आप वर्तमान में हैं, उसकी सबसे हालिया कमेंटरी के लिए एक पॉइंटर / लेबल है। masterजब आपने गिट रिपॉजिटरी (उदा git init) को इनिशियलाइज़ किया तो डिफ़ॉल्ट ब्रांच बनाई गई है ।

आप masterशाखा को हटा सकते हैं (जैसे git branch -D master)। आप HEADसूचक को हटा नहीं सकते ।


6
" HEADवर्तमान में आप जिस शाखा में हैं उसकी सबसे हाल की कमेटी के लिए एक पॉइंटर / लेबल है।" मुझे लगता है कि यह सबसे अच्छा भ्रामक है। यदि आप एक पुरानी कमिटमेंट की जांच करते हैं, तो HEAD अब उस पुरानी कमेटी की ओर इशारा करता है, न कि सबसे हाल की कमिटमेंट के लिए। सही?
लार्श

2
तुम सही हो। HEAD आपका नवीनतम चेकआउट है। लेकिन मेरे बचाव में, गिट के लिए, checkoutकमांड अन्य सामान्य एससीएम सिस्टम में शाखाओं को स्विच करने के बराबर है।
बेन्हॉर्गन

1
मुझे सहानुभूति है ... मैं आसानी से वही गलती कर सकता था। एकमात्र कारण जिस पर मैंने ध्यान दिया, क्योंकि मैं इस बात पर शोध करने की कोशिश कर रहा था कि वास्तव में HEAD का क्या मतलब है। कोई भी मौका जिसे आप अपने उत्तर को सही होने के लिए संपादित कर सकते हैं? मैं खुद के जैसे गैर-विशेषज्ञों के लिए सटीक वर्णन खोजने के लिए HEAD को एक कठिन अवधारणा मानता हूं। और सलाह है कि वहाँ वेब पर बैठे कि HEAD के बारे में गलत जानकारी देता है यह काफी कठिन बना देता है।
20

2
मुझे लगता है कि आपकी टिप्पणी किसी के लिए एक शानदार स्पष्टीकरण है जो HEADवास्तव में समझती है कि गिट पॉइंटर क्या है। मैं आपकी टिप्पणी की सराहना करता हूं और सोचता हूं कि दूसरे भी करेंगे। आपकी अनुवर्ती टिप्पणी के साथ मेरी मूल पोस्ट की सामग्री एक दूसरे के पूरक हैं। धन्यवाद।
बेन्हॉर्गन

4
एक तकनीकीता, लेकिन यदि आप एक पुरानी प्रतिबद्धता की जांच करते हैं, तो आप 'एक शाखा' पर नहीं रह जाते हैं। यदि आप एक शाखा के बजाय कमिटमेंट चेक करते हैं, तो आपके पास "डिटैच्ड हेड" कहा जाता है, अब आप 'एक शाखा पर' नहीं हैं। 'एक शाखा पर' होने का अर्थ है कि आपका HEAD एक शाखा का संदर्भ दे रहा है, और परिभाषा के अनुसार आप उस शाखा के सबसे हाल के प्रतिबद्ध पर हैं। सिर्फ इसलिए कि आपने 'b54fe7' चेक किया है, और उस कमिट के मास्टर पॉइंट्स का मतलब यह नहीं है कि आप मास्टर ब्रांच पर हैं। एक ही वचन की ओर इशारा करने वाली कई शाखाएँ हो सकती हैं, आप 'उस' पर हैं जिसे HEAD इंगित कर रहा है, यदि कोई हो।
जेसन गोएमाट

8

बस अपनी वर्तमान शाखा के बदलावों को आगे बढ़ाएं

git push origin

और यह आपकी शाखा को ' B' परिवर्तन ' ' में धकेल देगा origin/B
यदि आप अपनी masterशाखा पर हैं, तो git धक्का देगा origin/master
वास्तव में यह उन स्थानीय शाखाओं पर सभी बदलावों को आगे बढ़ाएगा जिनकी मिलान योग्य दूरस्थ शाखाएँ हैं origin। यह विन्यास सेटिंग push.default द्वारा नियंत्रित किया जाता हैप्रो Git पुस्तक में RefSpecs को आगे बढ़ाते हुए
भी देखें ।


आप जो देख रहे हैं, वह साइडबार है जो GitX प्रोजेक्ट के एक्सपेरिमेंटल GITX फोर्क में आपके रिमोट रेपो के सभी रिफस्पेक्ट्स का प्रतिनिधित्व करता है ।

वैकल्पिक शब्द

HEADकि दूरदराज के लिए डिफ़ॉल्ट शाखा नामित करेंगे। मैन पेज
देखें :git remote set-head

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

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