हटाए गए दूरस्थ शाखाओं के साथ मूल से प्राप्त करें?


440

जब मैं करता हूं git fetch originऔर मूल में एक डिलीट की गई शाखा होती है, तो यह मेरी रिपॉजिटरी में इसे अपडेट नहीं करता है। जब मैं ऐसा git branch -rकरता हूं तब भी पता चलता है origin/DELETED_BRANCH

मैं इसे कैसे ठीक करूं?


जवाबों:


811

आपको निम्नलिखित करने की आवश्यकता है

git fetch -p

यह दूरस्थ शाखाओं के स्थानीय डेटाबेस को अपडेट करेगा।


1
आपका बहुत बहुत धन्यवाद। मैंने पहले उन शाखाओं को मैन्युअल रूप से हटा दिया था।
Maksim Dmitriev

4
किसी कारण से, आपकी कमांड ने काम नहीं किया, लेकिन इसने मेरे originकांटे में एक गैर-मौजूद दूरस्थ शाखा के लिए काम किया : git fetch -p origin जब मैंने तब git branch -r गैर-मौजूद दूरस्थ शाखा को दिखाया नहीं था।
ओल्डफार्टडेवलपर

11
पूर्णता के लिए: यह क्रमशः stackoverflow.com/a/6127884/94687 और stackoverflow.com/a/17983126/94687 पर उल्लिखित के git remote prune originसमान और समान होना चाहिए । git pull --prune
इम्ज़ - इवान ज़खरीशेव

6
जब मैं ऐसा करता हूं तो लोग कहते हैं [deleted] (none) -> origin/ < branch name >और शाखा को अभी भी स्थानीय रेपो पर दिखाया गया है क्यों?
बुद्धी Jul४१

4
मुझे एक संदेश मिला है जिसमें कहा गया है कि मेरी शाखाएं हटा दी गई हैं, लेकिन चलने से git branchअभी भी उन शाखाओं का पता चलता है जिन्हें माना जाता है कि हटा दिया गया था।
sdfsdf

91

से http://www.gitguys.com/topics/adding-and-removing-remote-branches/

जब कोई दूरस्थ रिपॉजिटरी से किसी शाखा को हटाता है, तो जब उपयोगकर्ता किसी उपयोगकर्ता को git पुल या git लाने पर स्थानीय रिपॉजिटरी शाखाओं को स्वचालित रूप से नहीं हटाएगा। हालाँकि, यदि उपयोगकर्ता अपनी स्थानीय रिपॉजिटरी से सभी ट्रैकिंग शाखाओं को हटाना चाहते हैं, जिन्हें दूरस्थ रिपॉजिटरी में हटा दिया गया है, तो वे टाइप कर सकते हैं:

git दूरस्थ prune मूल

एक नोट के रूप में, the -p param का git fetch -pवास्तव में अर्थ है "प्रून"।
किसी भी तरह से आपने चुना, गैर-मौजूदा दूरस्थ शाखाएं आपके स्थानीय भंडार से हटा दी जाएंगी।


मुझे यह पसंद है क्योंकि यह कुछ भी नया नहीं लाता है।
मारेक आर

30

आपको निम्नलिखित करने की आवश्यकता है

git fetch -p

अपनी शाखा सूची को सिंक्रनाइज़ करने के लिए। Git मैनुअल का कहना है

-p, --prune
लाने के बाद, किसी भी दूरस्थ-ट्रैकिंग संदर्भ को हटा दें जो अब रिमोट पर मौजूद नहीं है। टैग प्रूनिंग के अधीन नहीं हैं यदि वे केवल डिफ़ॉल्ट टैग ऑटो-अनुसरण के कारण या किसी --tagsविकल्प के कारण प्राप्त किए जाते हैं । हालांकि, अगर टैग स्पष्ट रीस्पेक (या तो कमांड लाइन पर या दूरस्थ कॉन्फ़िगरेशन में, उदाहरण के लिए यदि रिमोट --mirrorविकल्प के साथ क्लोन किया गया था ) के कारण लाया जाता है , तो वे भी प्रूनिंग के अधीन हैं।

मैं व्यक्तिगत रूप से उपयोग करना पसंद करता हूं git fetch origin -p --progressक्योंकि यह एक प्रगति संकेतक दिखाता है।


11

इसने मेरे लिए काम किया।

git remote update --prune

6

git fetch -pइसके बारे में , Git 1.9 में इसका व्यवहार बदल गया है, और केवल Git 2.9.x / 2.10 यह दर्शाता है।

जेफ किंग ( ) द्वारा 9e70233 (13 जून 2016) प्रतिबद्ध देखें । (द्वारा विलय Junio सी Hamano - - में प्रतिबद्ध 1c22105 , 06 जुला 2016)peff
gitster

fetch: दस्तावेज़ जो कि प्रूनिंग लाने से पहले होता है

इसे 10a6cc8 में बदल दिया गया था fetch --prune: ( 2014-01-02 लाने से पहले भागो भागो), लेकिन ऐसा लगता है कि उस चर्चा में किसी को भी एहसास नहीं हुआ कि हम "बाद" स्पष्ट रूप से विज्ञापन कर रहे थे।

इसलिए प्रलेखन अब बताता है:

लाने से पहले , किसी भी रिमोट-ट्रैकिंग संदर्भ को हटा दें जो अब रिमोट पर मौजूद नहीं है

वह है क्योंकि:

जब हमारे पास एक दूरस्थ-ट्रैकिंग शाखा होती है, जिसका नाम " frotz/nitfol" पिछले भ्रूण से होता है, और अपस्ट्रीम में अब " frotz" नाम की एक शाखा होती है , तो भ्रूण frotz/nitfol" git fetch --prune" को अपस्ट्रीम से " " हटाने में विफल होगा । git git remote pruneसमस्या को ठीक करने के लिए उपयोगकर्ता को " " प्रयोग करने के लिए सूचित करेगा ।

जिस तरह से " fetch --prune" काम करता है, वह प्रचलित ऑपरेशन को आगे बढ़ाने से पहले करें। इस तरह, एक संघर्ष के उपयोगकर्ता को चेतावनी देने के बजाय, यह स्वचालित रूप से इसे ठीक करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.