यदि आपके Mac पर प्रोजेक्ट साफ दिखने के बावजूद git pull विफल हो जाता है, तो पहले सटीक त्रुटि की पहचान करें: हो सकता है कि Git स्थानीय या अनदेखी की गई फ़ाइलों की सुरक्षा कर रहा हो, सबमॉड्यूल परिवर्तनों को छिपा रहा हो, या अलग हुए ब्रांच इतिहास को मिलाने से मना कर रहा हो। फ़ाइलों को बदलने या मर्ज या रीबेस व्यवहार चुनने से पहले Terminal में रिपॉजिटरी की पूरी स्थिति और ब्रांच ट्रैकिंग का निरीक्षण करें।

रिपॉजिटरी से शुरुआत करें और वास्तविक त्रुटि का पता लगाएं

Terminal खोलें, प्रोजेक्ट फ़ोल्डर में जाएं, और पुल को दोबारा केवल तभी चलाएं जब आपको संदेश को फिर से देखना हो। Terminal वर्तमान macOS पर डिफ़ॉल्ट रूप से zsh का उपयोग करता है, और नीचे दिए गए उद्धृत कमांड zsh और bash दोनों में काम करते हैं। Apple की Terminal गाइड

cd "/path/to/your/project"
git status --short --branch
git pull

उद्धृत पथ (path) को अपने प्रोजेक्ट के वास्तविक फ़ोल्डर से बदलें। पूरी पुल त्रुटि को पढ़ें। “Your local changes … would be overwritten” फ़ाइल-स्तरीय रुकावट की ओर संकेत करता है। “Divergent branches” या “Not possible to fast-forward” का अर्थ है कि स्थानीय और अपस्ट्रीम कमिट इतिहास के बीच समाधान चुनने की आवश्यकता है। ये समस्याएं ग्राफिकल क्लाइंट में एक जैसी दिख सकती हैं, लेकिन इनके लिए अलग-अलग कदमों की आवश्यकता होती है।

संक्षिप्त स्टेटस दृश्य द्वारा छिपाई गई फ़ाइलों को देखें

एक संक्षिप्त स्टेटस डिस्प्ले महत्वपूर्ण विवरणों को छोड़ सकता है। अधिक विस्तृत रीड-ओनली निरीक्षण चलाएं:

git status --untracked-files=all --ignored=matching --ignore-submodules=none
git diff --
git diff --cached --

git status आमतौर पर अनट्रैक्ड फ़ाइलों की रिपोर्ट करता है, लेकिन एक स्थानीय सेटिंग उन्हें छिपा सकती है; --untracked-files=all अनट्रैक्ड फ़ोल्डरों के अंदर अलग-अलग फ़ाइलों को सूचीबद्ध करता है। अनदेखी की गई (ignored) फ़ाइलों को तब तक बाहर रखा जाता है जब तक कि अनुरोध न किया जाए, इसलिए --ignored=matching उन अनदेखे पाथ्स को दिखाता है जो इग्नोर नियमों से मेल खाते हैं। --ignore-submodules=none स्टेटस को सबमॉड्यूल परिवर्तनों की रिपोर्ट करने के लिए कहता है, भले ही कॉन्फ़िगरेशन उन्हें छिपा दे। Git इन स्टेटस मोड्स का दस्तावेजीकरण करता है और नोट करता है कि अनदेखे पाथ्स को एक विशिष्ट स्टेटस मार्कर मिलता है। Git स्टेटस दस्तावेज़ीकरण

दो git diff कमांड क्रमशः ट्रैक्ड वर्किंग-ट्री संपादन और स्टेड परिवर्तनों को दिखाते हैं। वे अनदेखी या अनट्रैक्ड फ़ाइल सामग्री को सूचीबद्ध नहीं करते हैं। इसलिए किसी GUI, किसी अन्य फ़ोल्डर, या फ़िल्टर किए गए स्टेटस व्यू का “साफ” परिणाम यह स्थापित नहीं करता है कि हर रुकावट दिखाई दे रही है; उसी रिपॉजिटरी में Terminal का उपयोग करें और Git द्वारा बताए गए सटीक पथ की जांच करें। इग्नोर नियम जानबूझकर मेल खाने वाली अनट्रैक्ड फ़ाइलों को सामान्य स्टेटस आउटपुट से बाहर रखते हैं। Git इग्नोर दस्तावेज़ीकरण

यदि रिपोर्ट किया गया पाथ इग्नोर किया गया या अनट्रैक्ड है, तो उसे हटाने या स्थानांतरित करने से पहले उसका निरीक्षण करें। नैदानिक शॉर्टकट के रूप में git clean, git reset --hard न चलाएं, या पाथ को ओवरराइट न करें: ये कमांड स्थानीय कार्य या फ़ाइलों को हटा सकते हैं। यदि इसमें कुछ ऐसा है जिसकी आपको आवश्यकता है, तो टकराव को हल करने से पहले उसकी एक अलग प्रतिलिपि बनाएं या उसे सुरक्षित रखें।

सबमॉड्यूल और इंडेक्स फ़्लैग्स की जांच करें

सबमॉड्यूल वाली एक रिपॉजिटरी अपने शीर्ष स्तर पर साफ दिख सकती है, जबकि किसी सबमॉड्यूल में स्थानीय संपादन, अनट्रैक्ड फ़ाइलें, या कोई भिन्न चेक-आउट कमिट हो सकता है। ऊपर दिया गया विस्तारित स्टेटस कमांड Git को सबमॉड्यूल स्थिति को अनदेखा न करने के लिए कहता है। आप नामित सबमॉड्यूल डायरेक्टरी में भी जा सकते हैं और वहां git status --untracked-files=all चला सकते हैं; प्रत्येक सबमॉड्यूल का अपना वर्किंग ट्री और स्टेटस होता है।

एक कम सामान्य मामले के लिए, Git के इंडेक्स में ऐसे फ़्लैग हो सकते हैं जो इस बात को प्रभावित करते हैं कि वह पाथ्स के साथ कैसा व्यवहार करता है। assume-unchanged Git को यह मान लेने के लिए कहता है कि कोई फ़ाइल इंडेक्स से मेल खाती है, और skip-worktree पुल जैसे संचालन के दौरान किसी पाथ को अपडेट करने से बच सकता है। इसके साथ असामान्य प्रविष्टियों का निरीक्षण करें:

git ls-files -v

यह इंडेक्स टैग के साथ ट्रैक्ड पाथ्स को सूचीबद्ध करता है; लोअरकेस टैग assume-unchanged प्रविष्टियों का संकेत दे सकते हैं, जबकि S skip-worktree को दर्शाता है। इसे एक निरीक्षण सुराग के रूप में लें, न कि क्लीनअप कमांड के रूप में। पूरी रिपॉजिटरी में आँख मूंदकर फ़्लैग्स को साफ़ न करें; यदि किसी प्रभावित पाथ का नाम दिया गया है, तो उसकी इंडेक्स स्थिति बदलने से पहले उसकी सामग्री और प्रोजेक्ट के स्पार्स-चेकआउट सेटअप की जांच करें। Git update-index दस्तावेज़ीकरण

यदि संदेश डाइवर्ज्ड ब्रांचेस के बारे में है

एक साफ वर्किंग ट्री का मतलब यह नहीं है कि आपकी स्थानीय ब्रांच और उसके अपस्ट्रीम का इतिहास समान है। जांचें कि कौन सी ब्रांच चेक आउट है और यह क्या ट्रैक करती है:

git branch --show-current
git branch -vv
git status --short --branch

स्टेटस और ब्रांच आउटपुट दिखा सकते हैं कि स्थानीय ब्रांच आगे है, पीछे है, या अपने अपस्ट्रीम से अलग (diverged) हो गई है। Git pull पहले रिमोट परिवर्तनों को लाता है और फिर कॉन्फ़िगर किए गए अपस्ट्रीम को एकीकृत करता है। इसका डिफ़ॉल्ट केवल-फास्ट-फॉरवर्ड व्यवहार तब रुक जाता है जब स्थानीय और रिमोट ब्रांचेस अलग हो जाती हैं; यह एक इतिहास नीति है, असंबद्ध (uncommitted) फ़ाइल परिवर्तनों का प्रमाण नहीं। Git pull दस्तावेज़ीकरण

यदि स्थानीय कमिट मौजूद हैं, तो ऐसी विधि चुनें जो प्रोजेक्ट के सहयोग नियमों के अनुकूल हो: रीबेस स्थानीय कमिट्स को अपस्ट्रीम के शीर्ष पर फिर से लागू करता है, जबकि मर्ज इतिहास को जोड़ता है और एक मर्ज कमिट बना सकता है। यदि आप अनिश्चित हैं तो रिपॉजिटरी के मेंटेनर्स या टीम की परंपरा से पुष्टि करें। केवल त्रुटि को दबाने के लिए वैश्विक पुल प्राथमिकता सेट करने या ब्रांच को जबरन रीसेट करने से बचें; दोनों में से कोई भी यह नहीं बताता कि उन कमिट्स का क्या होना चाहिए।

अगली जांच चुनने के लिए त्रुटि का उपयोग करें

फ़ाइल टकराव के लिए नामित पाथ की जांच करने की आवश्यकता होती है, जिसमें अनदेखी की गई फ़ाइलें और सबमॉड्यूल शामिल हैं। डाइवर्जेंस संदेश के लिए ब्रांच इतिहास का निरीक्षण करने और कमिट्स को एकीकृत करने का निर्णय लेने की आवश्यकता होती है। यदि स्टेटस साफ रहता है लेकिन त्रुटि किसी पाथ का नाम देती है, तो पुष्टि करें कि Terminal अपेक्षित चेकआउट में है, उस पाथ का सीधे निरीक्षण करें, और प्रासंगिक इंडेक्स फ़्लैग्स की जांच करें। सटीक संदेश सबसे उपयोगी निदान है: जब तक आप यह न समझ जाएं कि Git किस प्रकार का इनकार कर रहा है, तब तक स्थानीय फ़ाइलों और कमिट्स को सुरक्षित रखें।

स्रोत