जीआईटी टैग की जाँच करने पर "अलग राज्य" अलग हो जाता है


166

मैं अपने git प्रोजेक्ट के लिए एक परिनियोजन स्क्रिप्ट विकसित कर रहा हूं और मैंने केवल टैग का उपयोग करना शुरू कर दिया है। मैंने एक नया टैग जोड़ा है v2.0:

git tag -a v2.0 -m "Launching version 2.0"

और मैंने इस टैग को दूरस्थ रिपॉजिटरी में धकेल दिया है

git push --tags

जब मैं परिनियोजन स्क्रिप्ट निष्पादित करने का प्रयास करता हूं और v2.0मुझे यह संदेश मिलता है तो टैग की जाँच करें :

आप 'अलग राज्य' में हैं। आप चारों ओर देख सकते हैं, प्रायोगिक परिवर्तन कर सकते हैं और उन्हें प्रतिबद्ध कर सकते हैं, और आप किसी भी शाखा में किसी भी चेकआउट को प्रभावित किए बिना इस स्थिति में किए गए किसी भी हिट को त्याग सकते हैं। यदि आप अपने द्वारा बनाए गए कमिट को बनाए रखने के लिए एक नई शाखा बनाना चाहते हैं, तो आप चेकआउट कमांड के साथ -b का उपयोग करके (अब या बाद में) ऐसा कर सकते हैं। उदाहरण: git checkout -b new_branch_name HEAD अब है

क्या यह सामान्य है? रिपॉजिटरी लिम्बो में है क्योंकि अगर मैं करता हूं:

git branch

मुझे यह आउटपुट मिलता है:

* (no branch)
  master

क्षमा करें यदि यह स्पष्ट है, लेकिन मैं इसका पता नहीं लगा सका।


जब आप कहते हैं, "तैनाती स्क्रिप्ट निष्पादित करें और v2.0 की जाँच करें" तो क्या आपका कोड "git checkout v2.0" जैसा दिखता है? मैं अपनी रिलीज़ स्क्रिप्ट को सुधारने की कोशिश कर रहा हूं और जब मैं अपने प्रोडक्शन मशीन से "git checkout v2.0" चलाता हूं, तो मुझे "त्रुटि: pathspec 'v2.0' git के लिए ज्ञात किसी भी फ़ाइल (s) से मेल नहीं खाती।" भले ही मैंने उत्पादन पर "गिट चेकआउट v2.0" करने से पहले अपने स्थानीय मशीन पर "git push Origin --tags" चलाया हो। मैंने "git checkout v2.0" को कॉल करने से पहले उत्पादन पर "git pull --tags" और "git fetch --tags" चलाने की कोशिश की है, और यह भी काम नहीं करता है ... मुझे अभी भी मिल रहा है त्रुटि। कोई विचार?
जॉन एर्क

3
मैं उपरोक्त टिप्पणी को हटाने वाला था, लेकिन तब लगा कि यह किसी और की मदद कर सकता है। मुझे त्रुटि मिल रही थी क्योंकि जब मैं चला रहा था तो मेरे टैग नाम में एक TYPO था, "git checkout v2.0"। हालाँकि, टाइपो संबंधित त्रुटि ठीक वैसी ही त्रुटि है जैसा कि आप चलाते हैं, यदि आप टाइप करते हैं, तो "git checkout v2.0" बिना टाइपो के चलने के लिए, "git fetch --tags"। तो, आखिरकार, मेरी समस्या को हल करके, "git fetch --tags" PRIOR to run, "git checkout v2.0" बिना किसी टाइपोस के चलाया गया। ओह!
जॉन एर्क

अच्छा, हाँ, आपको पहले-पहले (या git fetch कि सभी को रिमोट से खींचना पड़ेगा) git करने की आवश्यकता है, इसलिए git टैग को चेकआउट कर सकता है। क्षमा करें, मैंने आज ही आपकी टिप्पणी देखी।
Khriz

जवाबों:


429

ठीक है, पहले कुछ शब्दों का थोड़ा निरीक्षण किया गया।

में git, एक tag(कई अन्य चीजों की तरह) जिसे एक पेड़ कहा जाता है । यह परियोजना के इतिहास में एक बिंदु को संदर्भित करने का एक तरीका है। ट्रीशेस एक टैग, एक कमिट, एक डेट स्पेसियर, एक ऑर्डिनल स्पेसियर या कई अन्य चीजें हो सकती हैं।

अब एक branchटैग की तरह है, लेकिन चल है। जब आप एक शाखा पर "चालू" होते हैं और एक प्रतिबद्ध बनाते हैं, तो शाखा को नई स्थिति में ले जाया जाता है जिसे आपने यह संकेत दिया है कि यह वर्तमान स्थिति है।

आपका HEADएक शाखा के लिए सूचक है जिसे "वर्तमान" माना जाता है। आमतौर पर जब आप एक रिपॉजिटरी को क्लोन करते हैं, तो HEADयह इंगित करेगा masterकि बदले में कौन एक कमिट को इंगित करेगा। जब आप कुछ ऐसा करते हैं git checkout experimental, तो आप HEADउस experimentalशाखा को इंगित करने के लिए स्विच करते हैं , जो एक अलग वचनबद्धता की ओर इशारा करती है।

अब स्पष्टीकरण।

जब आप ए git checkout v2.0करते हैं, तो आप एक ऐसे कमेंट पर स्विच कर रहे हैं, जो किसी द्वारा इंगित नहीं किया गया है branchHEADअब "अलग" है और एक शाखा की ओर संकेत नहीं। यदि आप अभी कमिट करने का निर्णय लेते हैं (जैसा कि आप कर सकते हैं), तो इस कमिट को ट्रैक करने के लिए अपडेट करने के लिए कोई ब्रांच पॉइंटर नहीं है। दूसरी कमेट पर वापस जाने से आप अपने द्वारा की गई इस नई कमिट को खो देंगे। यही संदेश आपको बता रहा हूं।

आमतौर पर, आप क्या कर सकते हैं कहने के लिए git checkout -b v2.0-fixes v2.0। यह ट्रीशिश v2.0(इस मामले में एक टैग) द्वारा इंगित की गई कमेटी में एक नया ब्रांच पॉइंटर बनाएगा और फिर HEADउस पर इंगित करने के लिए अपना बदलाव करेगा । अब, यदि आप कमिट करते हैं, तो उन्हें ट्रैक करना संभव होगा ( v2.0-fixesशाखा का उपयोग करके ) और आप काम कर सकते हैं जैसे आप आमतौर पर करेंगे। यदि आपने विशेष रूप से v2.0कोड पर एक नज़र डालना चाहते हैं तो कुछ भी "गलत" नहीं किया है । यदि फिर भी, आप वहां कोई परिवर्तन करना चाहते हैं जिसे आप ट्रैक करना चाहते हैं, तो आपको एक शाखा की आवश्यकता होगी।

आपको जीआईटी के पूरे डीएजी मॉडल को समझने में कुछ समय बिताना चाहिए। यह आश्चर्यजनक रूप से सरल है और सभी आदेशों को काफी स्पष्ट करता है।


ठीक है धन्यवाद, मुझे कोड में कोई बदलाव करने की आवश्यकता नहीं है इसलिए मुझे लगता है कि यह ठीक है। मुझे एक शाखा बनाने की आवश्यकता नहीं है। आपका बहुत बहुत धन्यवाद!
ख्रीज

1
मैं पहली बार इस जवाब को देख रहा था, लेकिन मैं गिट ब्रांचिंग डॉक्यूमेंटेशन पढ़ने के बाद खो गया था: http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is यह बहुत स्पष्ट था ।
मार्क स्टाइल्स

3
बहुत बढ़िया जवाब, लेकिन मैं के बारे में जोड़ सकते हैं: "एक और प्रतिबद्ध करने के लिए वापस स्विच करना आपको इस नए प्रतिबद्ध आपके द्वारा किए गए खो कर देगा।" - यदि आप अब भी प्रतिबद्ध पा सकते हैं git reflog, जिसके बारे में पता करने के लिए एक महान आदेश है! जब तक कचरा संग्रह नहीं हुआ है, तब तक कमिट करना "असंभव" प्रतीत होता है।
दिमित्री मिंकोवस्की

कचरा संग्रहण अभियान द्वारा अपरिचित कमिट खो सकते हैं।
नौफल इब्राहिम

1
Url गलत है क्योंकि उन्होंने पृष्ठ का लेआउट बदल दिया है।
jcubic

12

हां, यह सामान्य है। ऐसा इसलिए होता है क्योंकि आप एक ही कमिटमेंट चेक करते हैं, जिसमें एक हेड नहीं होता है। विशेष रूप से यह (जल्दी या बाद में) किसी भी शाखा का प्रमुख नहीं है।

लेकिन आमतौर पर उस राज्य के साथ कोई समस्या नहीं है। आप टैग से एक नई शाखा बना सकते हैं, अगर यह आपको सुरक्षित महसूस करता है :)


1
ठीक है, मैं इसे इस तरह से रखूँगा ... सुरक्षा वैसे भी खत्म हो गई है;)
खरिज़

जैसा कि आपने नौफ़ल्स के उत्तर में टिप्पणी की थी (इसके बारे में बेहतर है, मुझे कहना होगा;)): जब तक आप कुछ भी नहीं बदलते हैं, तब तक कुछ भी नहीं है जिसके बारे में आपको चिंतित होना चाहिए। हालांकि, यदि आप मानते हैं , कि आप कुछ बदल सकते हैं, तो आप बस एक शाखा बना सकते हैं, क्योंकि वे गिट में सस्ते हैं और आप इसे हटा सकते हैं (और बाद में और फिर से बनाएँ)।
किंगक्रंच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.