Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> प्रोग्रामिंग

Git Detached HEAD: कारण और समाधान

एक रिमाइंडर

यह समझने के लिए कि HEAD क्या है, आइए Git की अंतर्निहित ट्री-जैसी संरचना पर एक रिफ्रेशर करें।

  1. वर्किंग डायरेक्टरी: या वर्किंग ट्री। यह आपके स्थानीय डायरेक्टरी को संदर्भित करता है और git status आपको आपकी वर्किंग डायरेक्टरी की स्थिति देगा।
  2. HEAD: यह सिर्फ आपकी वर्तमान ब्रांच का अंतिम कमिट स्नैपशॉट है। यदि आप git checkout के साथ ब्रांच स्विच करते हैं तो HEAD ब्रांच पर अंतिम कमिट में बदल जाएगा।
  3. इंडेक्स: या स्टेजिंग एरिया, इसलिए जब आप कमिट करने के लिए git add फ़ाइलें करते हैं तो यह उन्हें इस इंडेक्स में जोड़ता है।

अटैच्ड HEAD को समझना

अब हम समझते हैं कि HEAD सिर्फ उस ब्रांच पर नवीनतम कमिट है जिस पर आप हैं। git status करके यह आपकी ब्रांच बताएगा जैसे On branch master और git log करके यह आपकी कमिट हिस्ट्री बताएगा जैसे:

commit 38373004b8f651b58cea64cd629e1e2c18c164a0 (HEAD -> master, origin/master, origin/HEAD)
Author: Felipe <email>
Date: Wed Sep 29 22:57:59 2020 -0500

फिर अगर हम अपनी ब्रांच को डेवलपमेंट ब्रांच में बदलते हैं git checkout development के साथ तो HEAD अंतिम कमिट पर चला जाएगा। तो इन सभी सामान्य मामलों में HEAD हमारा पीछा कर रहा है क्योंकि यह उस ब्रांच पर अंतिम कमिट से जुड़ा हुआ है जिस पर हम हैं।

HEAD को डिटैच करना

हमारे HEAD को डिटैच करने के कुछ तरीके हैं।

  • git checkout --detach कमांड का उपयोग करना।
  • कमिट हैश पर चेकआउट करना। जैसे यदि हम ऊपर से कमिट का उपयोग करते हैं git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
  • किसी भी दी गई ब्रांच पर ^0 जोड़कर। जैसे git checkout master^0।

मुझे यकीन नहीं है कि क्या आप जानबूझकर HEAD को डिटैच करना चाहेंगे। इसलिए सबसे आम मामला यह है कि गलती से आप किसी ब्रांच पर चेकआउट करना चाहते थे और ब्रांच नाम के बजाय कमिट हैश का उपयोग कर लिया।

तो डिटैच्ड HEAD के बाद क्या होता है? आपको इस तरह की चेतावनी मिल सकती है:

$ git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
Note: checking out '38373004b8f651b58cea64cd629e1e2c18c164a0'.
You are in 'detached HEAD' state.
You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.

एक बार डिटैच्ड HEAD एनवायरनमेंट पर, यदि आप git status करते हैं, भले ही आपने परिवर्तन किए हों, यह ऐसा कुछ कहेगा:

HEAD detached at ac63806
nothing to commit, working tree clean

तो यह ऐसा होगा जैसे आप समय में जम गए हैं और आप जो कुछ भी करते हैं वह खो जाता है, या केवल कहीं नहीं जा रहा है। क्यों? क्योंकि HEAD किसी चीज की ओर इशारा नहीं कर रहा है।

कुछ लोग रिपॉजिटरी के पिछले राज्य का पता लगाने के लिए इसे उपयोगी पाते हैं बिना चीजों को तोड़ने की चिंता के।

HEAD को फिर से अटैच करना

आपको यह समझना होगा कि यदि आप कभी डिटैच्ड स्टेट में आते हैं तो आपकी कोई भी ब्रांच प्रभावित नहीं होगी। अब, HEAD को फिर से अटैच करने का सबसे अच्छा तरीका एक नई ब्रांच बनाना है।

हम इसे git checkout -b <branch-name> जितना सरल कर सकते हैं।

क्या होगा अगर हमें एहसास नहीं हुआ कि हम बिना HEAD के थे और परिवर्तन करना शुरू कर दिया? ठीक है, यहां हमें एक अस्थायी ब्रांच बनाने और जिस ब्रांच में हमें कमिट करने की आवश्यकता है उसके साथ मर्ज करने की आवश्यकता होगी। उदाहरण के लिए:

git checkout -b temp-branch
git checkout master
git merge temp-branch

यह आपके अस्थायी ब्रांच से परिवर्तनों को उस ब्रांच में कमिट करेगा जिसमें आपको उनकी आवश्यकता है। इस मामले में master।

निष्कर्ष

आज हमने सीखा कि अपने HEAD को कैसे डिटैच करें (शाब्दिक रूप से नहीं) और बाद में क्या करना है। Git के आंतरिक कामकाज में HEAD क्या है, यह समझने से हमें डिटैच्ड HEAD जैसे विशेष मामलों को समझने में मदद मिल सकती है।

हमने यह भी सीखा कि अगर हम कभी डिटैच्ड HEAD स्टेट में आ जाते हैं तो चिंता न करें। बस ध्यान रखें कि चूंकि आपका HEAD ढीला है, परिवर्तन और कमिट कहीं भी प्रतिबिंबित नहीं होंगे। इसलिए सुनिश्चित करें कि आप HEAD को तदनुसार फिर से अटैच करते हैं।

  1. - Git Detached HEAD: कारण और समाधान

    एक रिमाइंडर यह समझने के लिए कि HEAD क्या है, आइए Git की अंतर्निहित ट्री-जैसी संरचना पर एक रिफ्रेशर करें। वर्किंग डायरेक्टरी: या वर्किंग ट्री। यह आपके स्थानीय डायरेक्टरी को संदर्भित करता है और git status आपको आपकी वर्किंग डायरेक्टरी की स्थिति देगा। HEAD: यह सिर्फ आपकी वर्तमान ब्रांच का अंतिम कमिट स्

  1. Git Reset: कमिट पूर्ववत करने की पूरी गाइड Git Reset: कमिट पूर्ववत करने की पूरी गाइड

    Git का ट्रैकिंग तंत्र git reset पर जाने से पहले, हमें git की अंतर्निहित संरचना को समझने की आवश्यकता है। Git नोड्स और पॉइंटर्स के साथ ट्री-जैसी संरचनाओं के माध्यम से फ़ाइलों को प्रबंधित और ट्रैक करता है। आपके स्थानीय git रिपॉजिटरी पर मूल रूप से इन तीन ट्रीज़ हैं: वर्किंग डायरेक्टरी: या वर्किंग ट्री,

  1. HTML <head> टैग HTML <head> टैग

    HTML में <head> टैग निम्नलिखित एलिमेंट्स के लिए एक कंटेनर के रूप में काम करता है: <title>, <style>, <base>, <link>, <meta>, <script>, <noscript>। HTML5 में, आप <head> एलिमेंट को शामिल किए बिना भी HTML डॉक्यूमेंट के साथ काम कर सकते हैं। <head&