जब आप उपयोग करते हैं git push origin :staleStuff, तो यह स्वचालित रूप से हटा देता है origin/staleStuff, इसलिए जब आप भागते हैं git remote prune origin, तो आपने कुछ शाखा को काट दिया है जिसे किसी और ने हटा दिया था। यह अधिक संभावना है कि आपके सहकर्मियों को अब git pruneआपके द्वारा हटा दी गई शाखाओं से छुटकारा पाने के लिए दौड़ने की आवश्यकता है।
तो वास्तव में क्या git remote pruneकरता है? मुख्य विचार: स्थानीय शाखाएं (ट्रैकिंग शाखाएं नहीं) git remote pruneकमांड द्वारा स्पर्श नहीं की जाती हैं और उन्हें मैन्युअल रूप से हटाया जाना चाहिए।
अब, बेहतर समझ के लिए एक वास्तविक दुनिया उदाहरण:
आपके पास 2 शाखाओं के साथ एक दूरस्थ भंडार है: masterऔर feature। मान लें कि आप दोनों शाखाओं पर काम कर रहे हैं, इसलिए परिणामस्वरूप आपके स्थानीय रिपॉजिटरी में ये संदर्भ हैं (किसी भी भ्रम से बचने के लिए पूर्ण संदर्भ नाम दिए गए हैं):
refs/heads/master(संक्षिप्त नाम master)
refs/heads/feature(संक्षिप्त नाम feature)
refs/remotes/origin/master(संक्षिप्त नाम origin/master)
refs/remotes/origin/feature(संक्षिप्त नाम origin/feature)
अब, एक विशिष्ट परिदृश्य:
- कुछ अन्य डेवलपर सभी काम खत्म करते हैं
feature, इसे मर्ज करते हैं masterऔर featureरिमोट रिपॉजिटरी से शाखा निकालते हैं ।
- डिफ़ॉल्ट रूप से, जब आप करते हैं
git fetch(या git pull), आपके स्थानीय भंडार से कोई संदर्भ नहीं निकाला जाता है, तो आपके पास अभी भी उन सभी 4 संदर्भ हैं।
- आप उन्हें साफ करने, और चलाने का फैसला करते हैं
git remote prune origin।
- git यह पता लगाता है कि
featureशाखा अब मौजूद नहीं है, इसलिए refs/remotes/origin/featureएक बासी शाखा है जिसे हटाया जाना चाहिए।
- अब आप सहित 3 संदर्भ, है
refs/heads/featureक्योंकि, git remote pruneकिसी भी दूर नहीं करता refs/heads/*संदर्भ।
स्थानीय branch.<branch_name>.mergeपैरामीटर की पहचान करना संभव है, कॉन्फ़िगरेशन पैरामीटर द्वारा दूरस्थ ट्रैकिंग शाखाओं के साथ जुड़ा हुआ है । यह पैरामीटर वास्तव में कुछ भी काम करने के लिए आवश्यक नहीं है (शायद छोड़कर git pull), इसलिए यह गायब हो सकता है।
(टिप्पणी से उदाहरण और उपयोगी जानकारी के साथ अद्यतन)
git remote show originऔर किसी भी शाखा को देख सकते हैंstale