आप दो शाखाओं पर एक फ़ाइल को संशोधित नहीं कर सकते हैं और उन शाखाओं के बीच फ़ाइल को कमिट या स्टोर किए बिना स्विच कर सकते हैं। ऐसा इसलिए है क्योंकि Git अनिश्चित है कि किन परिवर्तनों को सहेजा जाना चाहिए और किन परिवर्तनों को अधिलेखित किया जाना चाहिए।
यह मार्गदर्शिका "निम्न फ़ाइलों में आपके स्थानीय परिवर्तन चेकआउट द्वारा अधिलेखित कर दी जाएगी" त्रुटि और इसका क्या अर्थ है, इस पर चर्चा करती है। हम एक उदाहरण के माध्यम से चलेंगे ताकि आप यह पता लगा सकें कि इस त्रुटि को कैसे ठीक किया जाए।
निम्न फ़ाइलों में आपके स्थानीय परिवर्तन चेकआउट द्वारा अधिलेखित कर दिए जाएंगे
गिट संस्करण नियंत्रण आपको विकास की अलग-अलग पंक्तियों को बनाए रखने देता है, जिन्हें शाखाएं कहा जाता है। जब तक आप दो शाखाओं का विलय नहीं करते हैं, तब तक एक शाखा में परिवर्तन दूसरी शाखा में दिखाई नहीं देता है।
जब आप किसी शाखा में नेविगेट करते हैं, तो आप उसके इतिहास में किसी विशेष समय पर रिपॉजिटरी देख सकते हैं और अपने लिए आवश्यक परिवर्तन कर सकते हैं। जब आप तैयार हों तो आपको किए गए परिवर्तनों को प्रतिबद्ध करना चाहिए ताकि गिट आपके प्रोजेक्ट के विकास पर नज़र रखे।
आप दो शाखाओं के बीच स्विच नहीं कर सकते हैं यदि दोनों शाखाओं में एक अप्रतिबद्ध फ़ाइल परिवर्तन होता है। गिट को यह जानने की जरूरत है कि फाइल को सहेजा जाना चाहिए या प्रतिबद्धता का हिस्सा होना चाहिए। यह आपको गलती से कोड को ओवरराइट करने से बचाता है जिसे आप बाद में देखना चाहेंगे।
एक उदाहरण परिदृश्य
हम एक रिपॉजिटरी को क्लोन करने जा रहे हैं जिसमें README.md नामक एक फ़ाइल है:
git clone https://github.com/career-karma-tutorials/ck-git
README.md फ़ाइल की सामग्री इस प्रकार है:
# ck-git
हमारे भंडार की दो शाखाएँ हैं:विकास और मास्टर। हमारी स्थानीय कार्य निर्देशिका में, हम मूल मास्टर शाखा पर README.md फ़ाइल को बदलने जा रहे हैं:
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
# Career Karma Git
हमारी मास्टर शाखा अब हमारे रिमोट रिपोजिटरी से अलग है। हम अपनी विकास शाखा पर स्विच करने जा रहे हैं और इसके रीडमे की सामग्री को यह कहने के लिए बदल देंगे:
# Career Karma [Development]
हम इन आदेशों को निष्पादित करके इस फ़ाइल को विकास शाखा में बदल सकते हैं:
git checkout development nano README.md
इसके बाद, मास्टर शाखा में वापस जाएँ, शाखा में किए गए परिवर्तनों को प्रतिबद्ध करें, और उन्हें हमारे दूरस्थ रिपॉजिटरी में धकेलें:
git checkout master git add README.md git commit -m "docs: Update README" git push
गिट चेकआउट कमांड हमें मास्टर शाखा में जाने देता है। समीक्षा में, हमारे दूरस्थ भंडार में अब शामिल हैं:
- विकास शाखा पर एक संशोधित README.md
- एक मास्टर शाखा जो एक प्रतिबद्धता से आगे है
अब, मास्टर शाखा पर हमारे README.md को फिर से संशोधित करें:
# Tutorials
इसका मतलब है कि दोनों शाखाओं में दूरस्थ मास्टर शाखा के बीच अंतर है। आइए इन परिवर्तनों के साथ अपनी विकास शाखा में स्विच करने का प्रयास करें:
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
समाधान
चूंकि हमारे विकास और मास्टर शाखाओं में अप्रतिबद्ध परिवर्तन होते हैं, गिट चेकआउट के साथ आगे नहीं बढ़ सकता है। यदि Git आगे बढ़ता है, तो हमने अपने README.md में मास्टर शाखा में जो परिवर्तन किए हैं, वे सहेजे नहीं जाएंगे।
हम इस त्रुटि को दो तरह से ठीक कर सकते हैं। सबसे पहले, हम मास्टर शाखा में परिवर्तन कर सकते हैं:
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 फाइल को एक स्टैश में सेव कर देगा। जब भी हम इस फ़ाइल को फिर से देखने के लिए तैयार होते हैं, तो हम स्टैश पॉप कमांड का उपयोग करके स्टैश तक पहुँच सकते हैं:
git stash pop
यह कमांड हमारे रिपॉजिटरी में README.md फाइल को रिस्टोर करेगा। "स्टैशिंग" कहने का एक और तरीका है "बाद के लिए बचत।" स्टैश आपके परिवर्तनों की प्रतिबद्धता नहीं बनाते हैं।
उपरोक्त समाधानों में से एक को चलाने के बाद, हम विकास शाखा में सफलतापूर्वक नेविगेट कर सकते हैं:
git checkout development
यह आदेश हमारी शाखा को "विकास" में बदल देता है और हमें हमारे टर्मिनल में इस परिवर्तन के बारे में सूचित करता है:
Switched to branch 'development'
हमने समस्या का समाधान कर लिया है।
निष्कर्ष
गिट "निम्न फ़ाइलों में आपके स्थानीय परिवर्तन चेकआउट द्वारा अधिलेखित हो जाएंगे" त्रुटि तब होती है जब आप उन परिवर्तनों को किए या छिपाने के बिना दो शाखाओं में परिवर्तन करते हैं और शाखाओं के बीच नेविगेट करने का प्रयास करते हैं।
आप इस समस्या को या तो बाद के लिए अपने परिवर्तनों को छिपा कर रख सकते हैं या उन्हें एक कमिट में जोड़ सकते हैं।
अब आपके पास एक पेशेवर की तरह इस त्रुटि को ठीक करने के लिए आवश्यक ज्ञान है!