जबकि आप अलग सिर की समस्या का सामना नहीं कर सकते हैं, इसके बारे में जानना महत्वपूर्ण है ताकि आप इससे बच सकें। अनुशंसा के रूप में एक अलग HEAD पर प्रतिबद्ध न हों, लेकिन यदि आप करते हैं, तो हम आपको दिखाएंगे कि आप अपनी प्रतिबद्धताओं को कैसे सहेज सकते हैं।
एक अनुस्मारक
यह समझने के लिए कि HEAD क्या है, आइए Git की अंतर्निहित वृक्ष जैसी संरचना पर एक पुनश्चर्या करें।
- कार्यशील निर्देशिका:या कार्यशील वृक्ष। यह आपकी स्थानीय निर्देशिका और
git status
. को संदर्भित करता है आपको आपकी कार्यशील निर्देशिका की स्थिति देगा। - सिर:यह सिर्फ आपकी वर्तमान शाखा है जो अंतिम प्रतिबद्ध स्नैपशॉट है। यदि आप
git checkout
with के साथ शाखाओं को स्विच करना चाहते हैं तब HEAD शाखा पर अंतिम प्रतिबद्धता में बदल जाएगा। - इंडेक्स:या स्टेजिंग एरिया, इसलिए जब आप
git add
प्रतिबद्ध करने के लिए फ़ाइलें उन्हें इस अनुक्रमणिका में जोड़ती हैं।
संलग्न HEAD को समझना
अब जब हम समझते हैं कि आप जिस वर्तमान शाखा में हैं, उस पर HEAD केवल नवीनतम प्रतिबद्धता है। git status
doing करके यह आपकी शाखा को बताएगा उदा। 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 अंतिम कमिट में चला जाएगा। तो इन सभी सामान्य मामलों में प्रमुख हमारा पीछा कर रहा है क्योंकि यह माना जाता है कि हम जिस शाखा में हैं, उस पर अंतिम प्रतिबद्धता से जुड़ा होना चाहिए।
सिर को अलग करना
कुछ तरीके हैं जिनसे हम अपना सिर अलग कर सकते हैं।
git checkout --detach
का उपयोग करना आदेश।- एक प्रतिबद्ध हैश के लिए चेकआउट करें। उदा. यदि हम उपरोक्त
git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
से कमिट का उपयोग करते हैं - किसी भी शाखा में ^0 जोड़कर। उदा.
git checkout master^0
।
मुझे यकीन नहीं है कि आप जानबूझकर 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
करते हैं भले ही आपने बदलाव किए हों, यह कुछ इस तरह कहेगा:
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
HEAD detached at ac63806 nothing to commit, working tree clean
तो यह ऐसा होगा जैसे आप समय में जमे हुए हैं और आप जो कुछ भी करते हैं वह खो गया है, या बस कहीं नहीं जा रहा है। क्यों? ठीक है क्योंकि HEAD किसी बात की ओर इशारा नहीं कर रहा है।
कुछ लोगों को चीजों को तोड़ने की चिंता किए बिना भंडार की पिछली स्थिति का पता लगाने के लिए यह उपयोगी लगता है।
सिर को फिर से जोड़ना
आपको यह समझना चाहिए कि यदि आप कभी भी अलग अवस्था में आते हैं तो आपकी कोई भी शाखा प्रभावित नहीं होगी . अब, HEAD को फिर से जोड़ने का सबसे अच्छा तरीका एक नई शाखा बनाना है।
हम इसे git checkout -b <branch-name>
. जितना आसान कर सकते हैं ।
क्या होगा अगर हमें एहसास नहीं हुआ कि हम बिना सिर के थे और बदलाव करना शुरू कर दिया? खैर, यहां हमें एक अस्थायी शाखा बनाने की आवश्यकता होगी और केवल उस शाखा के साथ विलय करना होगा जिसे हमें प्रतिबद्ध करने की आवश्यकता है। उदाहरण के लिए:
git checkout -b temp-branch git checkout master git merge temp-branch
यह आपकी अस्थायी शाखा से उस शाखा में परिवर्तन करेगा जिसकी आपको आवश्यकता है। इस मामले में मास्टर।
निष्कर्ष
आज हमने सीखा कि कैसे अपने सिर को अलग करना है (शाब्दिक रूप से नहीं) और बाद में क्या करना है। यह समझना कि Git के आंतरिक कामकाज में HEAD क्या है, हमें विशेष मामलों जैसे कि एक अलग HEAD को समझने में मदद कर सकता है।
हमने यह भी सीखा कि अगर हम कभी भी एक अलग सिर की स्थिति में समाप्त हो जाते हैं तो चिंता न करें। बस इस बात का ध्यान रखें कि चूंकि आपका HEAD ढीला है, परिवर्तन और प्रतिबद्धता कहीं भी प्रतिबिंबित नहीं होगी। इसलिए सुनिश्चित करें कि आपने उसी के अनुसार HEAD को फिर से जोड़ा है।