उपरोक्त त्रुटि अक्सर तब ट्रिगर होती है जब हम उस रिपॉजिटरी को क्लोन नहीं करते जिसे हम पुल करने का प्रयास कर रहे हैं। प्रोजेक्ट्स समान हो सकते हैं, लेकिन हम स्थानीय रूप से एक पर काम कर रहे होंगे जबकि इसे Github पर रेपो से पुल करने का प्रयास कर रहे होंगे क्योंकि इसमें अन्य फ़ाइलें या फीचर्स हो सकते हैं जिन्हें हम अपने स्थानीय संस्करण में शामिल करना चाहेंगे।
इसे ठीक करने के कई तरीके हैं।
स्थानीय ब्रांच को रिमोट ब्रांच ट्रैक करने के लिए कहें
हम नीचे दी गई कमांड का उपयोग करके ऐसा कर सकते हैं।
git branch --track <branch-name> origin/<branch-name>
ऐसा करने से, रिमोट ब्रांच रिमोट सर्वर का समकक्ष बन जाती है। इसके बाद, दोनों रेपो के बीच अंतर देखने के लिए git status करें।
स्टेजिंग और स्टैशिंग
वर्जन कंट्रोल से स्थानीय फ़ाइलों को ओवरराइट होने से बचाने के लिए पुल करने के लिए, हम नीचे दी गई कमांड्स का उपयोग करके स्टेज और फिर स्टैश भी कर सकते हैं।
git add -A git stash git pull
git add -A के साथ, हम सभी परिवर्तनों को स्टेज कर रहे हैं। यह git add के समान है जिसमें यह सभी वर्किंग ट्रीज़ को देखता है और सभी वर्किंग पथों को स्टेज्ड परिवर्तनों, बदले हुए, नए, या अनदेखा न किए गए में जोड़ता है। इसके अलावा, यह git add -u की तरह भी कार्य करता है जिसमें यह पहले से ट्रैक की जा रही फ़ाइलों को देखता है, और उन फ़ाइलों में परिवर्तनों को स्टेज करता है यदि उन्हें हटा दिया गया है या यदि वे भिन्न हैं।
git stash के साथ हम स्टेज्ड और अनस्टेज्ड अनकमिटेड परिवर्तनों को ले रहे हैं, उन्हें भविष्य के उपयोग के लिए स्टैश कर रहे हैं, फिर उन्हें वर्किंग कॉपी से वापस ला रहे हैं। इसके बाद, हम नई फ़ाइलों को पुल करने जैसे परिवर्तन करने के लिए स्वतंत्र हैं।
फेचिंग और रीसेटिंग
यदि उपरोक्त में से किसी ने अभी तक आपके लिए काम नहीं किया है, तो फेचिंग और रीसेटिंग आज़माएं। क्योंकि हम इस विकल्प पर --hard का उपयोग करेंगे, यह महत्वपूर्ण है कि कम से कम ऊपर दिए गए दो का प्रयास करें क्योंकि --hard एक संभावित खतरनाक कमांड है जो सभी अनकमिटेड परिवर्तनों को फेंक देता है।
नीचे दिए गए फिक्स का प्रयास करने से पहले कृपया git status करें ताकि यह सुनिश्चित हो सके कि आपका आउटपुट खाली है।
git fetch --all git reset --hard origin/<branch-name>
git fetch --all के साथ, हम सभी रिमोट ब्रांचेज़ को फेच कर सकते हैं। फेच रिमोट ब्रांचेज़ की स्थानीय कॉपीज़ को अपडेट करेगा, लेकिन उन स्थानीय ब्रांचेज़ को अपडेट नहीं करेगा जो रिमोट ब्रांचेज़ को ट्रैक करती हैं। इसे प्राप्त करने के लिए, हमें git pull --all करने की आवश्यकता है।
git reset --hard origin/<branch-name> के साथ, हम अनिवार्य रूप से कह रहे हैं "मेरी स्थानीय ब्रांच में जो कुछ भी है उसे फेंक दो, और इसे मेरी रिमोट ब्रांच के समान बना दो"। यह सभी स्टेज्ड और अनस्टेज्ड परिवर्तनों को फेंक देता है।
निष्कर्ष
त्रुटि: the following untracked working tree files would be overwritten by merge तब ट्रिगर होती है जब हम एक रिमोट ब्रांच को पुल करने का प्रयास कर रहे होते हैं जबकि एक स्थानीय ब्रांच पर होते हैं। प्रोजेक्ट्स समान हो सकते हैं, लेकिन स्थानीय को रिमोट को ट्रैक करने में सक्षम होना चाहिए ताकि यह सफलतापूर्वक पुल कर सके।
यह त्रुटि अक्सर तब ट्रिगर होती है जब डेवलपर रेपो क्लोन करना भूल जाता है। इस त्रुटि को ठीक करने के अन्य तरीके स्टेजिंग और स्टैशिंग या फेचिंग और रीसेटिंग हैं, जिन्हें केवल तभी प्रयास किया जाना चाहिए जब पहले दो विधियाँ सफल न हों।