रिमोट शाखा को हटा दिया गया, लेकिन फिर भी यह 'शाखा-ए' में दिखाई देता है


552

मान लीजिए कि मेरे पास coolbranchमेरी रिपॉजिटरी में एक शाखा है।

अब, मैंने इसे (दूरस्थ और स्थानीय रूप से) दोनों के साथ हटाने का फैसला किया:

git push origin :coolbranch
git branch -D coolbranch

महान! अब शाखा वास्तव में हटा दी गई है।

लेकिन जब मैं दौड़ता हूं

git branch -a

मुझे अभी भी मिलता है:

remotes/origin/coolbranch

नोटिस करने के लिए कुछ है, जब मैं एक नया भंडार क्लोन करता हूं, तो सब कुछ ठीक है और git branch -aशाखा नहीं दिखाता है।

मैं जानना चाहता हूं - क्या branch -aएक नया उदाहरण क्लोन किए बिना सूची से शाखा को हटाने का एक तरीका है ?



58
यदि आप git fetch -p(या git pull -p) तो दूरस्थ शाखाओं को काट दिया जाएगा।
योयो

जवाबों:


688

git remote prune origin, जैसा कि अन्य उत्तर में सुझाया गया है, ऐसी सभी बासी शाखाओं को हटा देगा। शायद यही है कि आप ज्यादातर मामलों में क्या चाहते हैं, लेकिन अगर आप उस विशेष रिमोट ट्रैकिंग शाखा को हटाना चाहते हैं, तो आपको यह करना चाहिए:

git branch -d -r origin/coolbranch

( -rभूलना आसान है ...)

-rइस स्थिति में " -dदूरस्थ ट्रैकिंग शाखाओं के साथ सूची (यदि उपयोग की जाती है ) को हटा देगा ।" Git प्रलेखन के अनुसार यहाँ पाया गया: https://git-scm.com/docs/git-branch


11
git remote prune originया किसी भी प्रकार के git fetch --pruneझंडे ने मेरे मामले में मेरे लिए काम नहीं किया। ... लेकिन git branch -d -r origin/feature/branch-nameकाम किया। मुझे यकीन नहीं है कि यह featureनामस्थान (गिट प्रवाह) के तहत होने के साथ कुछ करना था, लेकिन यह है कि यह कैसे नीचे चला गया, किसी भी googler पाते हैं कि उनके साथ होता है।
मिस्टरपकर

8
क्या कोई कारण यह आवश्यक है? इन गैर-मौजूद शाखा नामों को सूची में छोड़ने के लिए वास्तव में बुरा लगता है और स्वचालित रूप से उन्हें prune नहीं।
akronymn

296

प्रयत्न:

git remote prune origin

से Git दूरस्थ प्रलेखन :

छटना

<नाम> के तहत सभी बासी दूरस्थ-ट्रैकिंग शाखाओं को हटाता है। इन बासी शाखाओं को पहले से ही हटाए गए दूरस्थ रिपॉजिटरी से <name> द्वारा संदर्भित किया गया है, लेकिन अभी भी "रीमोट्स / <name>" में स्थानीय रूप से उपलब्ध हैं।

--Dry-run विकल्प के साथ, रिपोर्ट करें कि कौन सी शाखाएँ छंट जाएँगी, लेकिन वास्तव में उन्हें prune न करें।


1
पूर्णता के लिए: यह करने के लिए समान होना चाहिए git pull --pruneपर उल्लेख किया stackoverflow.com/a/17983126/94687 : औरgit remote update --prune
इवान Zakharyaschev - IMZ

230

भयानक मत भूलना

git fetch -p

जो सभी मूलों को प्राप्त करता है और प्रूव करता है।


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

2
लेकिन शाखाएँ तब भी दिखाई देंगी जब आप यू-रनgit branch -a
निखिल साहू

1
@ निखिलशाहु: मैं उन दूरस्थ शाखाओं को नहीं देख रहा हूँ जिन्हें अब हटा दिया गया हैgit branch -a
user276648

20

हमारे विशेष मामले में, हम अपने रिमोट गिट रिपॉजिटरी के रूप में स्टैश का उपयोग करते हैं। हमने पिछले सभी उत्तरों की कोशिश की और कुछ भी काम नहीं कर रहा था। हमने निम्नलिखित करने के लिए समाप्त किया:

git branch –D branch-name (delete from local)
git push origin :branch-name (delete from remote)

फिर जब उपयोगकर्ता परिवर्तन खींचने गए, तो उन्हें निम्न कार्य करने की आवश्यकता थी:

git fetch -p

git branch -d branch-nameमेरे लिए काम किया। को नोटिस -Dदिया -d। वास्तव में जब मैंने ऊपरी मामले के साथ प्रयास किया तो डी -Dने नाम के साथ एक नई शाखा बनाई -D
RP-

1
"-D" अपने पुश या मर्ज की स्थिति की परवाह किए बिना डिलीट को मजबूर करने का एक तरीका है। स्पष्ट रूप से इसका उपयोग करने में सावधानी बरतें, लेकिन बहुत सारे मामलों में, यह आवश्यक हो गया है।
शैववैल

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