जब आप उपयोग करते हैं 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