Git का कहना है कि जब मैं दूरस्थ शाखा को हटाता हूं तो दूरस्थ रेफ मौजूद नहीं होता है


130

मैं भागा git branch -a

* master
  remotes/origin/test
  remotes/origin/master

मैं अपनी दूरस्थ शाखा हटाना चाहता हूं

मैंने कोशिश की

git push origin --delete remotes/origin/test

मुझे मिला

त्रुटि: 'रिमोट / उत्पत्ति / परीक्षण' को हटाने में असमर्थ: दूरस्थ रेफरी मौजूद नहीं है

यह कैसे मौजूद नहीं है?

मैंने एक किया git branch -a, और मैंने इसे सूचीबद्ध देखा।

क्या मैं कुछ भूल गया ?


1
git branch -aआपके स्थानीय में शाखाओं को सूचीबद्ध करेगा और आपके रिमोट से नहीं। सही?

मुझे लगता है कि वे सभी। मुझे यकीन नहीं है।
साइबर 8200

2
यह आपके स्थानीय के भीतर दूरस्थ शाखाओं को दिखाएगा। यह सभी दूरस्थ शाखाओं को सूचीबद्ध नहीं करेगा।

1
@peterh मुझे लगता है कि यह वास्तव में पूछ रहा है "मैं एक दूरस्थ शाखा को क्यों नहीं हटा सकता" (शायद जब शाखा को रिमोट से हटा दिया गया हो लेकिन दूरस्थ रेफरी अभी भी स्थानीय रूप से मौजूद है) और इसलिए, डुप्लिकेट नहीं, लेकिन साथ कर सकता है एक स्पष्ट शीर्षक
एंड्रयू स्पेंसर

1
मैंने शीर्षक का संपादन किया, आशा है कि यह प्रश्न के इरादे के करीब है
एंड्रयू स्पेंसर

जवाबों:


259

आदेश git branch -aदूरस्थ शाखाओं को दिखाता है जो आपके स्थानीय भंडार में मौजूद हैं । यह थोड़ा भ्रामक लग सकता है लेकिन इसे समझने के लिए, आपको यह समझना होगा कि एक दूरस्थ शाखा और एक शाखा के बीच एक अंतर है जो एक दूरस्थ भंडार में मौजूद है। दूरस्थ शाखाएँ स्थानीय शाखाएँ होती हैं जो दूरस्थ रिपॉजिटरी की शाखाओं को मैप करती हैं। तो दूरस्थ शाखाओं का समूह दूरस्थ रिपॉजिटरी की स्थिति का प्रतिनिधित्व करता है।

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

हालाँकि, डिफ़ॉल्ट रूप से, उन git fetchदूरस्थ शाखाओं को नहीं हटाता है जिनके पास रिमोट पर समकक्ष शाखा नहीं है। ऐसा करने के लिए, आपको सुदूर शाखाओं की सूची को स्पष्ट रूप से बताने की आवश्यकता है :

git fetch --prune

इससे स्वचालित रूप से दूरस्थ शाखाओं से छुटकारा मिल जाएगा जो अब रिमोट पर मौजूद नहीं हैं। बाद में, git branch -rआपको उन शाखाओं की एक अद्यतन सूची दिखाएगी जो वास्तव में रिमोट पर मौजूद हैं: और जिन्हें आप उपयोग करके हटा सकते हैं git push

कहा जा रहा है, उपयोग करने के लिए git push --delete, आपको दूरस्थ रिपॉजिटरी पर शाखा का नाम निर्दिष्ट करने की आवश्यकता है; आपकी दूरस्थ शाखा का नाम नहीं। तो शाखा को हटाने के लिए test(आपकी दूरस्थ शाखा द्वारा प्रतिनिधित्व origin/test), आप उपयोग करेंगे git push origin --delete test


git branch -r | grep "origin"कांटा का उपयोग करने वाली बड़ी परियोजनाओं के साथ भी मदद मिलेगी
सेराफ

तो इस संदेश को git से प्राप्त करने के 2 कारण हैं: या तो शाखा पहले ही सर्वर पर हटा दी गई थी, या आपने शाखा नाम के साथ गलत उपसर्ग किया था remotes/origin/। अथवा दोनों।
एंड्रयू स्पेंसर

136

इसका मतलब remotes/origin/testयह है कि आपके पास testरिमोट सर्वर में एक शाखा है origin। तो आज्ञा होगी

git push origin --delete test


13
  1. दूरस्थ शाखाओं की सूची प्राप्त करें
git fetch # synchronize with the server
git branch --remote # list remote branches
  1. आपको दूरस्थ शाखाओं की एक सूची मिलनी चाहिए:
origin/HEAD -> origin/master
origin/develop
origin/master
origin/deleteme
  1. अब, हम शाखा को हटा सकते हैं:
git push origin --delete deleteme


4

यह देखते हुए कि दूरस्थ शाखा रिमोट है / उत्पत्ति / परीक्षण आप दो तरीकों का उपयोग कर सकते हैं:

git push origin --delete test

तथा

git branch -D -r origin/test

3

मैं अंत में एक मामूली समायोजन के साथ प्रहार द्वारा समाधान का पालन किया । मेरे कदम पीछे
- git fetch --prune;
- git branch -aनिम्नलिखित मुद्रण
    master
    branch
    remotes/origin/HEAD -> origin/master
    remotes/origin/master
    remotes/origin/branch(हटाने के लिए दूरस्थ शाखा)
- git push origin --delete branch
यहां, हटाने के लिए शाखा का नाम नहीं दिया गया है remotes/origin/branchलेकिन बस branch। और शाखा को हटा दिया जाता है।


+1 फिर से टिप्पणी के लिए: शाखा का नाम, मैं हटाने की कोशिश कर रहा था origin/branchजब यह बस होना चाहिए branch
केन

1

git branch -a आपके स्थानीय में शाखाओं को सूचीबद्ध करेगा न कि आपके रिमोट में शाखाओं को।

और त्रुटि का error: unable to delete 'remotes/origin/test': remote ref does not existमतलब है कि आपके रिमोट में उस नाम की कोई शाखा नहीं है लेकिन शाखा आपके स्थानीय में मौजूद है।


यह मददगार है। इसने मेरी डिलीट की समस्या हल कर दी। मैं सोच रहा हूं कि 'git push --delete origin / test' क्यों नहीं हुआ, जबकि "git push --delete test" ने काम किया
user10293779

1

मूल से 'मास्टर' के अलावा अन्य शाखाओं को हटाने के लिए एक आसान लाइनर:

git branch --remotes | grep -v 'origin/master' | sed "s/origin\///" | xargs -i{foo} git push origin --delete {foo}

सुनिश्चित करें कि आप ऐसा करने से पहले इसे चलाने के निहितार्थ को समझते हैं!


इस कोड के लिए धन्यवाद! यह एकमात्र git कोड है जिसे मैंने मास्टर को छोड़कर सभी दूरस्थ शाखाओं को हटाने पर काम किया है।
एल्विन

1

मेरे लिए इसने $ branch git शाखा -D -r मूल / mybranch पर काम किया

विवरण

$ ▶ गिट शाखा -a | grep mybranch remotes / मूल / mybranch है

$ ▶ गिट शाखा -r | grep mybranch मूल / mybranch

$ Loyment git शाखा का विकास * सुविधा / पूर्व तैनाती

$ Ran git पुश ओरिजिन --delete mybranch त्रुटि: 'mybranch' को हटाने में असमर्थ: दूरस्थ रेफरी में त्रुटि नहीं है: 'git@10.102.100.38: config / myrepo.git' पर कुछ रिफ को पुश करने में विफल।

$ B गिट शाखा -D मूल-आर / माइब्रंच हटा दी गई दूरस्थ शाखा उत्पत्ति / माइब्रंच (62c7421 थी)।

$ ▶ गिट शाखा -a | grep mybranch

$ ▶ गिट शाखा -r | grep mybranch


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