यदि आपके स्थानीय मशीन पर किए गए अनकमिटेड परिवर्तनों और रिमोट रिपॉजिटरी की सामग्री के बीच कोई कन्फ्लिक्ट है, तो आप रिमोट रिपॉजिटरी से कोड पुल नहीं कर सकते। यह आपको उस कोड को ओवरराइट करने से बचाता है जिसे आप रखना चाहते हैं।
इस गाइड में, हम "Your local changes to the following files would be overwritten by merge" त्रुटि पर चर्चा करते हैं और यह त्रुटि क्यों उत्पन्न होती है। हम एक उदाहरण के माध्यम से भी चलेंगे ताकि आप सीख सकें कि इस त्रुटि को कैसे हल किया जाए।
Your local changes to the following files would be overwritten by merge
एक रिपॉजिटरी का आपका स्थानीय संस्करण अक्सर रिमोट रिपॉजिटरी के संस्करण से भिन्न होगा। यह Git की एक मुख्य विशेषता है: आप उन्हें रिमोट रिपॉजिटरी में पुश करने के लिए तैयार होने तक स्थानीय रूप से परिवर्तन कर सकते हैं।
जब आप एक रिमोट रिपॉजिटरी से कोड पुल करते हैं, तो Git उस रिपॉजिटरी की सामग्री को पुनः प्राप्त करेगा और उन्हें आपकी स्थानीय मशीन पर सहेज लेगा। यह केवल तभी हो सकता है जब आपने उन फ़ाइलों में किए गए सभी परिवर्तनों को कमिट कर दिया हो जिन्हें आप सहेजना चाहते हैं।
यदि आप पहले परिवर्तनों को कमिट किए बिना कोड पुल करने का प्रयास करते हैं, तो आप "Your local changes to the following files would be overwritten by merge" त्रुटि देख सकते हैं। यह केवल तभी होगा जब आपने एक ऐसी फ़ाइल को संशोधित किया हो जिसे रिमोट रिपॉजिटरी के संस्करण में भी बदल दिया गया हो।
एक उदाहरण परिदृश्य
आइए ck-git नामक एक Git रिपॉजिटरी में एक संशोधन करें। पहले, आइए इस रिपॉजिटरी की एक कॉपी क्लोन करें:
git clone https://github.com/career-karma-tutorials/ck-git
अब हमारे पास हमारी स्थानीय मशीन पर रिपॉजिटरी की एक कॉपी है। इस रिपॉजिटरी में एक फ़ाइल है: README.md। इसकी सामग्री है:
# ck-git
हम GitHub पर जाकर सर्वर पर इस फ़ाइल को संशोधित करने जा रहे हैं। हमारी फ़ाइल में अब सामग्री है:
# Career Karma Git
रिपॉजिटरी का हमारा स्थानीय संस्करण अब रिमोट रिपॉजिटरी पर origin master ब्रांच से भिन्न है।
हमारे संस्करण में वह कोड है जो रिमोट रिपॉजिटरी में था जब हमने कोड खींचा था। रिमोट रिपॉजिटरी में हमारे द्वारा README.md में किए गए परिवर्तन हैं।
अब, मान लें कि हम अपनी स्थानीय मशीन पर README.md को बदलते हैं:
# CK Git
हमने अपनी फ़ाइल बदल दी है। अब, आइए अपने रिमोट रिपॉजिटरी में किए गए परिवर्तनों को पुल करने का प्रयास करें ताकि हम उन्हें अपनी स्थानीय मशीन पर सहेज सकें:
git pull
यह कमांड एक त्रुटि लौटाती है:
... Updating a30b784..ec281fc error: Your local changes to the following files would be overwritten by merge: README.md Please commit your changes or stash them before you merge. Aborting
हमने संक्षिप्तता के लिए इस कमांड की प्रतिक्रिया को छोटा किया है। जिस संदेश पर हमें ध्यान केंद्रित करना चाहिए वह है "Your local changes to the following files would be overwritten by merge"।
समाधान
अब हमारी फ़ाइल की दो कॉपी हैं: एक हमारी स्थानीय मशीन पर और एक हमारे रिमोट रिपॉजिटरी में। जब हम अपने रिमोट रिपॉजिटरी से अपना कोड पुल करते हैं, तो Git अनिश्चित होता है कि फ़ाइल का कौन सा संस्करण रहना चाहिए।
इस त्रुटि को हल करने के लिए, हम या तो अपने कोड को स्टैश कर सकते हैं या अपने कोड को कमिट कर सकते हैं।
अपने कोड को कमिट करने के लिए, हम अपनी README.md फ़ाइल को एक कमिट में जोड़ सकते हैं और उस फ़ाइल को शामिल करते हुए एक कमिट बना सकते हैं:
git add README.md git commit -m "docs: Update README.md"
यह हमारे स्थानीय मशीन पर README.md में किए गए परिवर्तनों को हमारे प्रोजेक्ट के कमिट इतिहास में जोड़ देगा। Git अब जान जाएगा कि हम इन परिवर्तनों को रखना चाहते हैं।
दूसरा समाधान है अपने परिवर्तनों को स्टैश करना। यह हमें अपने परिवर्तनों को बाद में देखने के लिए सहेजने देता है। हम git stash कमांड का उपयोग करके अपने कोड को स्टैश कर सकते हैं:
git stash
यह कमांड हमारे परिवर्तन को एक स्टैश में सहेजता है (हमारा कोड बाद के लिए "स्टैश दूर" हो जाता है)। अब चूंकि हमने अपने कोड को स्टैश कर दिया है, हम सुरक्षित रूप से अपने रिमोट रिपॉजिटरी से कोड पुल कर सकते हैं:
git pull
Git स्टैश में कोड को git stash pop कमांड चलाकर देखा जा सकता है। यह हमें उन परिवर्तनों को देखने देगा जो हमने अपनी फ़ाइल में किए थे लेकिन अपने रिपॉजिटरी में कमिट नहीं किए थे। इसका मतलब है कि यदि हम बाद में फ़ाइल में परिवर्तनों को कमिट करने का निर्णय लेते हैं, तो हम ऐसा कर सकते हैं।
निष्कर्ष
"Your local changes to the following files would be overwritten by merge" त्रुटि तब होती है जब आप अपने स्थानीय मशीन पर एक रिमोट रिपॉजिटरी को पुल करने का प्रयास करते हैं जिसकी सामग्री आपके रिपॉजिटरी के स्थानीय संस्करण की सामग्री के साथ कन्फ्लिक्ट करती है।
इस त्रुटि को ठीक करने के लिए, या तो अपने परिवर्तनों को बाद के लिए स्टैश कर दें या अपने परिवर्तनों को कमिट करें। अब आपके पास इस त्रुटि को एक विशेषज्ञ की तरह ठीक करने का ज्ञान है!