2010-12-05 21 views
38

मैं गिट के लिए बिल्कुल नया हूं, और अभी भी इसे लटका रहा हूं। मैंने हाल ही में शाखाओं के साथ काम करना शुरू कर दिया है और कुछ प्रश्नों में भाग रहा हूं।गिट शाखा मूल/HEAD -> मूल/मास्टर

मेरे पास दो विकास प्रणालियां हैं, उबंटू डेस्कटॉप और मैकबुकप्रो। मैंने उबंटू सिस्टम पर एक नई organizations शाखा में काम का एक गुच्छा किया और काम किया और मेरे रिमोट रेपो को धक्का दिया।

[email protected]:/projects$ git branch 
    accounting 
    master 
* organizations 

[email protected]:/projects$ git branch -r 
    origin/accounting 
    origin/master 
    origin/organizations 
    origin/superstar 

तब मैं MBP में स्विच नई शाखा को खींचने के लिए:

  1. क्यों:

    [email protected]:/projects$ git branch 
        accounting 
    * master 
    
    [email protected]:/projects$ git branch -r 
        origin/HEAD -> origin/master 
        origin/accounting 
        origin/master 
        origin/superstar 
    
    [email protected]:/projects$ git pull 
        2e20a14..ef35730 accounting -> origin/accounting 
        271a1a5..7e947ab master  -> origin/master 
    * [new branch]  organizations -> origin/organizations 
    
    [email protected]:/projects$ git branch 
    * accounting 
        master 
    
    [email protected]:/projects$ git branch -r 
        origin/HEAD -> origin/master 
        origin/accounting 
        origin/master 
        origin/organizations 
        origin/superstar 
    

    तो मेरे सवालों इन कर रहे हैं इस बिंदु पर, मैं इन शाखाओं था एमबीपी की शाखा origin/HEAD -> origin/master है, लेकिन उबंटू प्रणाली नहीं है? वह शाखा क्या है?

  2. git pull स्वचालित रूप से सभी नई रिमोट शाखाओं को खींचता है? मैंने सोचा कि मुझे इसे खींचने के लिए नई शाखाओं का नाम बताना था। जैसा कि आप देख सकते हैं, यह कमांड git pull पर रिमोट organizations शाखा खींच लिया।

उत्तर

35

HEAD आमतौर पर अभी चेक आउट शाखा की ओर इशारा करता:

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

मुझे नहीं पता कि यह उबंटू सिस्टम पर आपके भंडार में क्यों नहीं है। शायद आपने मूल रूप से उस संग्रह से अपना कोड धक्का दिया था (जब मूल खाली था और इस प्रकार अभी तक कोई सिर नहीं था) और इसे कभी अपडेट नहीं किया।

उत्पत्ति/सिर जैसे कुछ होने से अभ्यास में बहुत महत्वपूर्ण नहीं है, वैसे भी।

अपने अन्य प्रश्न का उत्तर देने के लिए: यदि आप तर्क के बिना git pull चलाते हैं, तो यह वास्तव में रिमोट से सबकुछ प्राप्त करता है (git fetch बिना तर्क के चलाया जाता है, इसलिए यह सबकुछ प्राप्त करता है)। हालांकि, सबकुछ विलय नहीं हुआ है। केवल रिमोट-ट्रैकिंग शाखाएं (git branch -r में सामान) अपडेट की गई हैं।

+5

ओह, मैं उल्लेख करना भूल गया: आप 'गीट रिमोट सेट-हेड उत्पत्ति-ए' का उपयोग मूल/हेड बनाया/अपडेट करने के लिए कर सकते हैं। –

+2

'दस्तावेज] (http://www.kernel.org/pub/software/scm/git/docs/git-remote.html)' गिट रिमोट सेट-हेड 'के लिए उदाहरण के उद्देश्य को समझने में मददगार है 'मूल/HEAD'। – millerdev

9

जहाँ तक मुझे पता है, HEAD शाखा नहीं है, बल्कि इतिहास पेड़ (यानी एक प्रतिबद्धता) के नोड के लिए एक सूचक है। आपके द्वारा विशेष रूप से काम करने वाली प्रतिलिपि में रहने वाली फ़ाइलों में HEAD द्वारा वर्णित राज्य है।

आमतौर पर HEAD एक शाखा में सबसे हालिया प्रतिबद्धता के लिए इंगित करता है, इसलिए आपके पास कामकाजी प्रति में सबसे हालिया फाइलें हैं। git reset HEAD^ का उपयोग करके आप पॉइंटर को पिछली प्रतिबद्धता में बदल सकते हैं (यानी आपकी स्थानीय प्रतिलिपि में अंतिम प्रतिबद्धता को पूर्ववत करना)।

अब, प्रत्येक गिट रेपो में HEAD है, इसे git show HEAD के साथ जांचें। तदनुसार, origin/HEAD आपके origin रिमोट के HEAD है। What is HEAD in Git?

3

यह मास्टर के लिए सिर्फ एक सूचक है, यदि आप चाहें तो एक प्रतीकात्मक लिंक।

  1. नेविगेट अपने भंडार को
  2. निष्पादित करें:: git remote set-head origin -d

अब यह चला जाना चाहिए आप सुरक्षित रूप से (या विंडोज़ उपयोगकर्ताओं के लिए Git बैश/cygwin) एक टर्मिनल में निम्न कार्य करके इसे हटा सकते हैं :

$ git branch -r 
origin/master 
संबंधित मुद्दे