जब आप किसी प्रोजेक्ट पर स्वयं या टीम के हिस्से के रूप में काम कर रहे हों, तो ऐसे उदाहरण हो सकते हैं जब आप किसी कमिट को पूर्ववत करना चाहते हैं। git reset
कमांड वास्तविक जीवन रक्षक के रूप में जाने जाने वाले उपकरणों में से एक है।
Git का ट्रैकिंग तंत्र
git reset
में जाने से पहले , हमें गिट की अंतर्निहित संरचना के बारे में समझने की जरूरत है। गिट नोड्स और पॉइंटर्स के साथ पेड़ जैसी संरचनाओं के माध्यम से फाइलों का प्रबंधन और ट्रैक करता है।
आपके स्थानीय गिट भंडार पर मूल रूप से इनमें से तीन "पेड़" हैं:
- कार्य निर्देशिका :या वर्किंग ट्री, और यह आपकी स्थानीय निर्देशिका और
git status
. को संदर्भित करता है आपको आपकी कार्यशील निर्देशिका की स्थिति देगा। - सिर :क्या आपकी वर्तमान शाखा का अंतिम प्रतिबद्ध स्नैपशॉट है। यदि आप
git checkout
with के साथ शाखाओं को स्विच करना चाहते हैं तब HEAD शाखा पर अंतिम प्रतिबद्धता में बदल जाएगा। - सूचकांक :या मंचन क्षेत्र। तो जब आप
git add
प्रतिबद्ध करने के लिए फ़ाइलें उन्हें इस अनुक्रमणिका में जोड़ती हैं।
गिट कार्यप्रवाह
निम्न उदाहरण किसी फ़ाइल में परिवर्तन करना और फिर उसे git add
का उपयोग करके अनुक्रमणिका (स्टेजिंग) में जोड़ना दिखाता है फिर git status
checking चेक कर रहे हैं किए जाने वाले परिवर्तनों को देखने के लिए।
अब जब हम git commit
करते हैं यह एक अधिक स्थायी स्नैपशॉट के रूप में सहेजता है और उस पॉइंटर पर मास्टर और हेड को अपडेट करता है। तो अगर हम git status
करते हैं git commit
. के बाद , हम देखेंगे कि तीनों पेड़ एक ही स्थिति में हैं (कुछ भी नहीं करना होगा)।
तो इसका उद्देश्य क्या है गिट रीसेट ?
आप सोच रहे होंगे कि यह सब प्रस्तावना सिर्फ git reset
. पाने के लिए ही क्यों है? . खैर git reset
इन पेड़ों को अलग-अलग तरीकों से हेरफेर करता है। तो आप जो करना चाहते हैं उसके आधार पर git रीसेट विभिन्न विकल्पों को स्वीकार करेगा।
गिट रीसेट मोड
मान लीजिए कि हमने कुछ बदलाव और फाइलें की हैं, फिर यह महसूस करने के लिए कि हमने उन्हें गलत शाखा में डाल दिया है या हमारी प्रतिबद्धता छोटी है इसलिए हम रिवाइंड करना चाहते हैं। यहां जानिए git रीसेट मोड के बारे में उपयोगी है।
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
मोड के साथ सभी गिट रीसेट हेड पॉइंटर को अपडेट करेंगे। इसमें निम्नलिखित सिंटैक्स है
git reset <mode> <commit-optional>
मुख्य तरीके हैं:
--soft
:हेड पॉइंटर को रीसेट करता है और इंडेक्स और वर्किंग डायरेक्टरी को अछूता छोड़ देता है। तो आपका HEAD रीसेट हो जाएगा और अन्य पेड़ अभी भी नवीनतम परिवर्तन दिखा रहे हैं।--mixed
:डिफ़ॉल्ट विकल्प। HEAD और इंडेक्स को रीसेट करता है। यह मूल रूप से आपके सभी परिवर्तनों को अन-स्टेज करता है और आपकेgit add
. करने से पहले आपको छोड़ देता है . नोट: यदि आप बिना किसी विकल्प के अपने आप git रीसेट करते हैं, तो इसकी व्याख्याgit reset --mixed
के रूप में की जाएगी ।--hard
:इससे सावधान रहें . HEAD, अनुक्रमणिका को रीसेट करने के अलावा, यह आपकी कार्यशील निर्देशिका को भी रीसेट करता है। तो आप लिखित कोड खो सकते हैं! वर्तमान HEAD पॉइंटर (अंतिम कमिट) के बाद किसी भी बदलाव के रूप में इसे छोड़ दिया जाता है।
अन्य मोड जैसे --merge
और --keep
आधिकारिक दस्तावेज़ीकरण में पढ़ा जा सकता है।
उपयोगी गिट रीसेट तरकीबें
प्रतिबद्धता को वापस करना
याद रखें कि यदि हम मोड को छोड़ देते हैं (बिना किसी विकल्प के गिट रीसेट) तो इसकी व्याख्या -मिश्रित के रूप में की जाएगी।
अब अगर हम सिर्फ टाइप करें git reset HEAD
कुछ नहीं होगा, लेकिन अगर हम git reset HEAD~1
. करते हैं तो हमारा HEAD अब अपनी पिछली प्रतिबद्धता की ओर इशारा करेगा।
निम्नलिखित उदाहरण पिछले एक से जारी है। मान लीजिए कि हम अपनी नमूना फ़ाइल में नया टेक्स्ट जोड़ते हैं। फिर हम ऐड और कमिट करते हैं। फिर जब हम git रीसेट HEAD~1 करते हैं, तो हमारे सभी परिवर्तन बिना चरण के और पिछली प्रतिबद्धता पर होते हैं।
जब हम किसी कमिट को पूर्ववत करना चाहते हैं तो यह एक उपयोगी और तेज़ तरीका है!
किसी विशिष्ट फ़ाइल को अन-स्टेजिंग करना
मान लीजिए कि आपने git ऐड के साथ इंडेक्स में एक फाइल जोड़ी है। हम केवल निम्न कार्य करके उस फ़ाइल को हटा सकते हैं:
git reset HEAD <file-name>
परिदृश्य:मैंने अपना सारा कोड खराब कर दिया है! क्या मैं वापस जा सकता हूँ जब यह काम कर रहा था?
यदि आप सभी स्थानीय परिवर्तनों को दूर करना चाहते हैं और अपनी पिछली प्रतिबद्धता पर वापस जाना चाहते हैं तो आपका अंतिम उपाय git reset --hard
है .
अक्सर यदि आप अपना कोड तोड़ते हैं तो यह आपका एकमात्र विकल्प हो सकता है। यदि आप प्रतिबद्ध हैश जानते हैं तो आप do git reset --hard <commit>
. लेकिन ध्यान दें कि यह विशिष्ट कमिट (यदि कोई हो) के बाद किसी अन्य कमिट को भी प्रभावित करेगा!
परिदृश्य:यह प्रतिबद्धता एक नई शाखा में होनी चाहिए थी!
ऐसा अक्सर होता है, खासकर जब आप प्रोडक्शन में काम करना शुरू कर रहे हों। अगर आपके साथ ऐसा होता है, तो घबराने की जरूरत नहीं है!
हमें मूल रूप से नई शाखा बनाने की आवश्यकता है जिसमें शाखा की स्थिति है जिसे हमें रिवाइंड करने की आवश्यकता है। फिर हम प्रभावित शाखा को रीसेट करेंगे, और फिर हम नई शाखा में चेकआउट करेंगे और वहां काम करेंगे:
git branch new-branch
git reset HEAD~1 --hard
git checkout new-branch
जीवनरक्षक सही!
एक अंतिम शब्द
git reset --hard
करते समय सावधान रहें और यह भी कि जब आप किसी विशिष्ट प्रतिबद्धता के लिए रिवाइंड कर रहे हों, विशेष रूप से उत्पादन कोड में और जब आप अन्य डेवलपर्स के साथ काम कर रहे हों। अक्सर git revert इन परिवर्तनों को करने का सुरक्षित तरीका है। लेकिन यह दूसरी बार बातचीत है। तब तक! 👋🏼