Your local changes to the following files would be overwritten by checkout
Git वर्जन कंट्रोल आपको डेवलपमेंट की अलग लाइनें बनाए रखने देता है, जिन्हें ब्रांच कहा जाता है। एक ब्रांच पर परिवर्तन दूसरी ब्रांच पर तब तक प्रतिबिंबित नहीं होते जब तक आप दोनों ब्रांच को मर्ज नहीं करते।
जब आप किसी ब्रांच पर नेविगेट करते हैं, तो आप रिपॉजिटरी को उसके इतिहास में एक विशेष समय पर देख सकते हैं और आवश्यक परिवर्तन कर सकते हैं। जब आप तैयार हों तो आपको किए गए परिवर्तनों को कमिट करना चाहिए ताकि Git आपके प्रोजेक्ट के विकास को ट्रैक कर सके।
यदि दोनों ब्रांच में एक अनकमिटेड फ़ाइल परिवर्तन है तो आप दो ब्रांच के बीच स्विच नहीं कर सकते। Git को यह जानने की आवश्यकता है कि क्या फ़ाइल सेव की जानी चाहिए या कमिट का हिस्सा होना चाहिए। यह आपको उस कोड को गलती से ओवरराइट करने से बचाता है जिसे आप बाद में संदर्भित करना चाह सकते हैं।
एक उदाहरण परिदृश्य
हम एक रिपॉजिटरी को क्लोन करने जा रहे हैं जिसमें README.md नामक एक फ़ाइल है:
git clone https://github.com/career-karma-tutorials/ck-git
README.md फ़ाइल की सामग्री इस प्रकार है:
# ck-git
हमारे रिपॉजिटरी में दो ब्रांच हैं: development और master। हमारे स्थानीय वर्किंग डायरेक्टरी में, हम मूल master ब्रांच पर README.md फ़ाइल को बदलने जा रहे हैं:
# Career Karma Git
हमारी master ब्रांच अब हमारे रिमोट रिपॉजिटरी से अलग है। हम अपनी development ब्रांच पर स्विच करने जा रहे हैं और इसकी README की सामग्री को इस तरह बदल देंगे:
# Career Karma [Development]
हम इन कमांड्स को निष्पादित करके development ब्रांच पर इस फ़ाइल को बदल सकते हैं:
git checkout development nano README.md
अगला, master ब्रांच पर वापस स्विच करें, ब्रांच पर किए गए परिवर्तनों को कमिट करें, और उन्हें हमारे रिमोट रिपॉजिटरी में पुश करें:
git checkout master git add README.md git commit -m "docs: Update README" git push
git checkout कमांड हमें master ब्रांच पर स्विच करने देता है। समीक्षा में, हमारा रिमोट रिपॉजिटरी अब इसमें शामिल है:
- development ब्रांच पर एक संशोधित README.md
- master ब्रांच जो एक कमिट आगे है
अब, आइए master ब्रांच पर फिर से README.md को संशोधित करें:
# Tutorials
इसका मतलब है कि दोनों ब्रांच में रिमोट master ब्रांच और स्थानीय के बीच अंतर हैं। आइए इन परिवर्तनों के साथ अपनी development ब्रांच पर स्विच करने का प्रयास करें:
git checkout development
यह कमांड एक त्रुटि संदेश लौटाता है:
error: Your local changes to the following files would be overwritten by checkout: README.md Please commit your changes or stash them before you switch branches. Aborting
समाधान
क्योंकि हमारी development और master ब्रांच में अनकमिटेड परिवर्तन हैं, Git चेकआउट के साथ आगे नहीं बढ़ सकता। यदि Git आगे बढ़ता, तो master ब्रांच पर हमने README.md में जो अनकमिटेड परिवर्तन किए हैं, वे सेव नहीं होंगे।
हम इस त्रुटि को दो तरीकों से ठीक कर सकते हैं। पहला, हम master ब्रांच पर अपने परिवर्तनों को कमिट कर सकते हैं:
git add README.md git commit -m "docs: Add tutorials message to README.md file" git push
इन कमांड्स में, हम README.md फ़ाइल को स्टेजिंग एरिया में जोड़ते हैं, स्टेजिंग एरिया से सभी फ़ाइलों को एक कमिट में जोड़ते हैं, और अपने परिवर्तन को रिमोट रिपॉजिटरी में पुश करते हैं।
Git के पास अब हमारे README.md फ़ाइल का रिकॉर्ड है कि यह हमारे द्वारा किए गए परिवर्तनों के साथ कैसे दिखाई देती है।
वैकल्पिक रूप से, हम अपने परिवर्तनों को बाद के लिए स्टैश कर सकते हैं। यह एक अच्छा समाधान है यदि आप अपने परिवर्तनों को बाद में पहुंच योग्य बनाना चाहते हैं जब आप अभी तक परिवर्तनों को कमिट में जोड़ने के लिए तैयार नहीं हैं। अपने परिवर्तनों को स्टैश करने के लिए, आप git stash कमांड चला सकते हैं:
git stash save README.md
यह हमारी README.md फ़ाइल को एक स्टैश में सेव करेगा। जब भी हम इस फ़ाइल को फिर से देखना चाहते हैं, तो हम stash pop कमांड का उपयोग करके स्टैश तक पहुंच सकते हैं:
git stash pop
यह कमांड हमारी README.md फ़ाइल को हमारे रिपॉजिटरी में पुनर्स्थापित करेगा। "स्टैशिंग" "बाद के लिए सेव करने" का दूसरा तरीका है। स्टैश आपके परिवर्तनों के कमिट नहीं बनाते।
उपरोक्त समाधानों में से एक चलाने के बाद, हम development ब्रांच पर सफलतापूर्वक नेविगेट कर सकते हैं:
git checkout development
यह कमांड हमारी ब्रांच को "development" पर स्विच करता है और हमारे टर्मिनल में इस परिवर्तन के बारे में सूचित करता है:
Switched to branch 'development'
हमने समस्या हल कर ली है।
निष्कर्ष
Git "Your local changes to the following files would be overwritten by checkout" त्रुटि तब होती है जब आप उन परिवर्तनों को कमिट या स्टैश किए बिना दो ब्रांच पर परिवर्तन करते हैं और ब्रांच के बीच नेविगेट करने का प्रयास करते हैं।
आप इस समस्या को या तो अपने परिवर्तनों को बाद के लिए स्टैश करके या उन्हें कमिट में जोड़कर ठीक कर सकते हैं।
अब आपके पास इस त्रुटि को प्रो की तरह ठीक करने का ज्ञान है!