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

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

Git का ट्रैकिंग तंत्र

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

आपके स्थानीय git रिपॉजिटरी पर मूल रूप से इन तीन "ट्रीज़" हैं:

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

Git वर्कफ़्लो

निम्नलिखित उदाहरण एक फ़ाइल में परिवर्तन करने और फिर git add का उपयोग करके इसे इंडेक्स (स्टेजिंग) में जोड़ने को दर्शाता है, फिर यह देखने के लिए git status चेक करता है कि कमिट किए जाने वाले परिवर्तन क्या हैं।

अब जब हम git commit करते हैं तो यह एक अधिक स्थायी स्नैपशॉट के रूप में सेव होता है और मास्टर और HEAD को उस पॉइंटर पर अपडेट करता है। इसलिए यदि हम git commit के बाद git status करते हैं, तो हम देखेंगे कि सभी तीन ट्रीज़ एक ही स्थिति में हैं (कमिट करने के लिए कुछ भी नहीं होगा)।

तो git reset का उद्देश्य क्या है?

आप सोच रहे होंगे कि git reset तक पहुंचने के लिए यह सब प्रस्तावना क्यों। खैर, git reset इन ट्रीज़ को विभिन्न तरीकों से मैनिपुलेट करता है। इसलिए git reset आपके द्वारा किए जाने वाले कार्य के आधार पर विभिन्न विकल्पों को स्वीकार करेगा।

Git Reset मोड्स

मान लीजिए हमने कुछ परिवर्तन और फ़ाइलें कमिट कीं, फिर महसूस किया कि हमने उन्हें गलत ब्रांच पर कमिट किया है या हमारा कमिट बगी है इसलिए हम रिवाइंड करना चाहते हैं। यहां git reset मोड्स को जानना उपयोगी है।

मोड के साथ सभी git reset HEAD पॉइंटर को अपडेट करेंगे। इसका निम्नलिखित सिंटैक्स है:

git reset <mode> <commit-optional>

मुख्य मोड्स हैं:

  • --soft: HEAD पॉइंटर रीसेट करता है और इंडेक्स और वर्किंग डायरेक्टरी को अछूता छोड़ देता है। तो आपका HEAD रीसेट हो जाएगा और अन्य ट्रीज़ अभी भी नवीनतम परिवर्तन दिखाएंगे।
  • --mixed: डिफ़ॉल्ट विकल्प। HEAD और इंडेक्स को रीसेट करता है। यह मूल रूप से आपके सभी परिवर्तनों को अन-स्टेज करता है और आपको git add करने से पहले छोड़ देता है। नोट: यदि आप बिना किसी विकल्प के git reset करते हैं, तो इसे git reset --mixed के रूप में व्याख्या किया जाएगा।
  • --hard: इससे सावधान रहें। HEAD, इंडेक्स को रीसेट करने के अलावा, यह आपके वर्किंग डायरेक्टरी को भी रीसेट करता है। तो आप लिखे गए कोड को खो सकते हैं! वर्तमान HEAD पॉइंटर (अंतिम कमिट) के बाद किसी भी परिवर्तन को त्याग दिया जाता है।

--merge और --keep जैसे अन्य मोड्स को आधिकारिक दस्तावेज़ में पढ़ा जा सकता है।

उपयोगी Git Reset ट्रिक्स

कमिट को रिवाइंड करना

याद रखें कि यदि हम मोड को छोड़ देते हैं (बिना किसी विकल्प के git reset) तो इसे --mixed के रूप में व्याख्या किया जाएगा।

अब यदि हम सिर्फ git reset HEAD टाइप करते हैं तो कुछ नहीं होगा, लेकिन यदि हम git reset HEAD~1 करते हैं तो हमारा HEAD अब अपने पिछले कमिट की ओर इशारा करेगा।

निम्नलिखित उदाहरण पिछले से जारी है। मान लीजिए हम अपने सैंपल फ़ाइल में नया टेक्स्ट जोड़ते हैं। फिर हम git add और कमिट करते हैं। फिर git reset HEAD~1 करने के बाद, हमारे सभी परिवर्तन अन-स्टेज हो जाते हैं और पिछले कमिट पर होते हैं।

यह एक उपयोगी और तेज़ तरीका है जब हम एक कमिट को पूर्ववत करना चाहते हैं!

एक विशिष्ट फ़ाइल को अन-स्टेज करना

मान लीजिए आपने git add के साथ एक फ़ाइल को इंडेक्स में जोड़ा। हम उस फ़ाइल को केवल इस करके हटा सकते हैं:

git reset HEAD <file-name>

परिदृश्य: मैंने अपना सारा कोड बिगाड़ दिया! क्या मैं वापस जा सकता हूं जब यह काम कर रहा था?

यदि आप सभी स्थानीय परिवर्तनों को फेंकना चाहते हैं और अपने पिछले कमिट पर वापस जाना चाहते हैं तो आपका अंतिम उपाय git reset --hard है।

अक्सर यदि आप अपना कोड तोड़ते हैं तो यह आपका एकमात्र विकल्प हो सकता है। यदि आप कमिट हैश जानते हैं तो आप git reset --hard <commit> कर सकते हैं। लेकिन ध्यान दें कि यह विशिष्ट कमिट के बाद किसी भी अन्य कमिट को भी प्रभावित करेगा (यदि कोई हो)!

परिदृश्य: यह कमिट एक नई ब्रांच में होना चाहिए था!

यह अक्सर होता है, खासकर जब आप प्रोडक्शन में काम करना शुरू कर रहे होते हैं। अगर आपके साथ ऐसा होता है, तो घबराएं नहीं!

हमें जो करने की आवश्यकता है वह मूल रूप से उस नई ब्रांच को बनाना है जिसमें उस ब्रांच की स्थिति हो जिसे हमें रिवाइंड करने की आवश्यकता है। फिर हम प्रभावित ब्रांच को रीसेट करेंगे, और फिर हम नई ब्रांच पर चेकआउट करेंगे और वहां कमिट करेंगे:

git branch new-branch
git reset HEAD~1 --hard
git checkout new-branch

लाइफसेवर सही!

एक अंतिम शब्द

git reset --hard करते समय सावधान रहें और विशेष रूप से प्रोडक्शन कोड में और जब आप अन्य डेवलपर्स के साथ काम कर रहे हों तो विशिष्ट कमिट पर रिवाइंड करते समय। अक्सर git revert इन परिवर्तनों को करने का सुरक्षित तरीका है। लेकिन यह दूसरी बार के लिए एक वार्तालाप है। तब तक!

  1. पासवर्ड के बिना Mac को कैसे रीसेट करें पासवर्ड के बिना Mac को कैसे रीसेट करें

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

  1. लिनक्स में रूट पासवर्ड कैसे रीसेट करें लिनक्स में रूट पासवर्ड कैसे रीसेट करें

    लिनक्स में, नियमित यूजर्स और सुपरयूजर्स को पासवर्ड प्रमाणीकरण के माध्यम से सेवाओं तक पहुंचने की अनुमति है। यदि कोई नियमित यूजर अपना पासवर्ड याद नहीं रख सकता, तो एक सुपरयूजर टर्मिनल से सीधे एक नियमित यूजर का पासवर्ड रीसेट कर सकता है। हालांकि, क्या होगा यदि सुपरयूजर (या रूट यूजर) अपना पासवर्ड खो देता

  1. Git के लिए शुरुआती गाइड Git के लिए शुरुआती गाइड

    यदि आप एक Linux उपयोगकर्ता हैं, तो आप शायद किसी बिंदु पर Git से मिले होंगे, शायद एक नया प्रोग्राम डाउनलोड करने की कोशिश करते समय या CVS या Subversion जैसे संस्करण नियंत्रण प्रणालियों को देखते समय। Git, Linux कर्नेल के प्रसिद्ध Linus Torvalds द्वारा बनाया गया रिविजन कंट्रोल सिस्टम है, जो मौजूदा समाधा