यदि आपके Mac पर Git में हटाई गई शाखाएं अभी भी दिखाई देती हैं, तो अपनी स्थानीय रिपॉजिटरी से रिमोट-ट्रैकिंग संदर्भों (references) को प्रून करें। Terminal खोलें, रिपॉजिटरी फ़ोल्डर में जाएं, जांचें कि आप किस रिमोट को रिफ्रेश करना चाहते हैं, फिर git fetch --prune origin चलाएं। यह फ़ेच किए गए संदर्भों को अपडेट करता है और origin से जुड़े पुराने संदर्भों को हटाता है; यह रिमोट सर्वर से शाखाओं को नहीं हटाता है और न ही आपकी स्थानीय शाखाओं को हटाता है। Git का git fetch दस्तावेज़
जब आप प्रून करते हैं तो क्या रिफ्रेश होता है?
एक रिमोट-ट्रैकिंग शाखा, रिमोट रिपॉजिटरी पर मौजूद किसी शाखा का आपका स्थानीय रिकॉर्ड होती है। उदाहरण के लिए, origin/feature-x रिमोट शाखा की अंतिम फ़ेच की गई स्थिति को दर्शाता है। यह feature-x नाम की स्थानीय शाखा से अलग होती है। यदि रिमोट शाखा हटा दी जाती है, तो आपका स्थानीय संदर्भ तब तक बना रह सकता है जब तक Git इसे प्रून नहीं कर देता। Git की डिफ़ॉल्ट फ़ेच मैपिंग आमतौर पर रिमोट शाखाओं को refs/remotes/origin/ के तहत संग्रहीत करती है, हालांकि कोई रिपॉजिटरी एक अलग मैपिंग का उपयोग कर सकती है। Git दस्तावेज़ बताता है कि कॉन्फ़िगर किए गए फ़ेच refspecs रिमोट शाखाओं को कैसे मैप करते हैं।
प्रूनिंग उस रिमोट के फ़ेच कॉन्फ़िगरेशन द्वारा कवर किए गए स्थानीय संदर्भों के साथ रिमोट के वर्तमान संदर्भों की तुलना करती है, और फिर उन संदर्भों को हटा देती है जो अब रिमोट पर मौजूद नहीं हैं। यह आपके स्थानीय दृश्य को साफ़ करता है; यह रिमोट शाखाओं को हटाने का कमांड नहीं है। जब किसी रिपॉजिटरी में पुराने शाखा संदर्भ जमा हो जाते हैं, तो यह git branch --all जैसे कमांड को पढ़ना आसान बना सकता है। Git का प्रूनिंग मार्गदर्शन
Terminal से संदर्भों को रिफ्रेश करें
Apple Mac पर Terminal में zsh को डिफ़ॉल्ट शेल के रूप में दस्तावेज़ित करता है, हालांकि Mac या प्रबंधित परिवेश (managed environment) को अलग तरह से कॉन्फ़िगर किया जा सकता है। नीचे दिए गए Git कमांड सामान्य macOS Terminal सेटअप में काम करते हैं। Apple की Terminal उपयोगकर्ता मार्गदर्शिका
- Terminal खोलें और रिपॉजिटरी के फ़ोल्डर में जाएं। यदि आपको इसका पथ (path) पता है, तो स्पेस होने पर इसे उद्धरण चिह्नों (quotes) में रखें, उदाहरण के लिए:
cd "/Users/sam/Projects/Client App"
उदाहरण पथ को अपनी रिपॉजिटरी के वास्तविक पथ से बदलें। यदि आप अनिश्चित हैं कि आप कहाँ हैं, तो pwd वर्तमान डायरेक्टरी को प्रिंट करता है। Git कमांड्स को रिपॉजिटरी के अंदर से चलाएं।
- रिपॉजिटरी और रिमोट नाम की पुष्टि करें:
git status --short --branch
git remote -v
git remote -v कॉन्फ़िगर किए गए रिमोट नामों और URL को सूचीबद्ध करता है। origin आम है, लेकिन उस सर्वर के लिए दिखाया गया नाम उपयोग करें जिसके संदर्भों को आप रिफ्रेश करना चाहते हैं। यदि रिपॉजिटरी में कई रिमोट हैं, तो केवल इच्छित रिमोट को ही प्रून करें।
- पुराने संदर्भों को हटाने से पहले उनका पूर्वावलोकन (preview) करें:
git remote prune --dry-run origin
Git रिपोर्ट करता है कि वह किन संदर्भों को हटाए बिना प्रून करेगा। dry-run विकल्प git remote prune से संबंधित है; यह नए ब्रांच टिप्स को फ़ेच नहीं करता है। Git का git remote दस्तावेज़
- यदि पूर्वावलोकन आपकी अपेक्षा के अनुरूप है, तो एक ही चरण में रिफ्रेश और प्रून करें:
git fetch --prune origin
यह रिमोट के कॉन्फ़िगर किए गए refspec के अनुसार फ़ेच करता है और उस मैपिंग द्वारा कवर किए गए पुराने संदर्भों को हटाता है। Git का फ़ेच आउटपुट प्रून किए गए संदर्भ को - से चिह्नित करता है। अपडेट फ़ेच किए बिना प्रून करने के लिए, इसके बजाय git remote prune origin का उपयोग करें। Git दोनों एकमुश्त (one-off) विधियों का दस्तावेजीकरण करता है।
- परिणाम जांचें:
git branch --remotes
git branch --all
केवल-रिमोट सूची रिमोट-ट्रैकिंग शाखाओं को दिखाती है; सभी-शाखाओं की सूची में रिमोट-ट्रैकिंग और स्थानीय दोनों शाखाएं शामिल होती हैं। रिमोट सूची से अनुपस्थित शाखा अभी भी स्थानीय शाखा के रूप में मौजूद हो सकती है, और प्रूनिंग इसे नहीं हटाती है।
यदि पुराना संदर्भ बना रहता है
पहले जांचें कि आपने सही रिमोट नाम का उपयोग किया है। फिर रिपॉजिटरी के फ़ेच कॉन्फ़िगरेशन पर विचार करें: रिमोट को केवल चयनित शाखाओं को ट्रैक करने के लिए सेट किया जा सकता है, और कस्टम refspecs यह बदलते हैं कि फ़ेच और प्रून किन संदर्भों पर कार्य करते हैं। यदि आवश्यक हो तो origin को बदलते हुए, git config --get-all remote.origin.fetch के साथ मैपिंग का निरीक्षण करें। यदि रिमोट को केवल एक उपसमूह (subset) को ट्रैक करने के लिए कॉन्फ़िगर किया गया है, तो उस उपसमूह के बाहर की शाखाएं डिफ़ॉल्ट फ़ेच के तहत अपेक्षानुसार व्यवहार नहीं कर सकती हैं। Git फ़ेच refspecs और प्रूनिंग पर उनके प्रभाव की व्याख्या करता है।
यदि कमांड किसी नेटवर्क या प्रमाणीकरण (authentication) त्रुटि की रिपोर्ट करता है, तो Git रिमोट फ़ेच पूरा नहीं कर सका; कनेक्शन या एक्सेस समस्या का समाधान करें और पुनः प्रयास करें। जब तक आप विशेष रूप से टैग पर भी प्रूनिंग लागू नहीं करना चाहते, तब तक --prune-tags जोड़ने से बचें: Git चेतावनी देता है कि स्पष्ट टैग refspecs के कारण उस रिमोट से गायब स्थानीय टैग हटाए जा सकते हैं। Git का प्रूनिंग दस्तावेज़ इस टैग चेतावनी की व्याख्या करता है।
जब आप वर्तमान रिमोट-ट्रैकिंग जानकारी और क्लीनअप दोनों एक साथ चाहते हैं, तो git fetch --prune origin का उपयोग करें। जब आप उम्मीदवारों की समीक्षा करना चाहते हैं, तो पहले git remote prune --dry-run origin का उपयोग करें, या जब आप शाखा अपडेट फ़ेच किए बिना क्लीनअप चाहते हैं, तो git remote prune origin का उपयोग करें।
स्रोत
Change the default shell in Terminal on Mac — Apple Support