git delete remotes: दूरस्थ refs मौजूद नहीं है


107

संक्षेप में;

  • मैं दूरस्थ मल्टीपल मर्ज किए गए रीमोट को कैसे हटा सकता हूं?

अधिक पृष्ठभूमि;

मेरे पास दसियों रीमोट्स के साथ जीआईटी रेपो है जिसे मास्टर में मिला दिया गया है। मैं इन रिमोट को एक बार में प्रयोग करके हटा सकता हूं:

git push --delete origin myBranch-1234

हालांकि यह सभी रीमोट के लिए धीमी और थकाऊ प्रक्रिया है। तो मैं इस आदेश की कोशिश कर रहा हूँ:

git branch -r --merged | grep origin | grep -v master | xargs git push origin --delete

git branch -r --mergedसभी मर्ज किए गए रीमोट को सूचीबद्ध करता है।
grep originउत्पत्ति को शामिल करने की आज्ञा बताता है।
grep -v masterमास्टर को बाहर करने की आज्ञा बताता है।
xargs git push origin --deleteरीमोट की सूची को हटाने के लिए कमांड को बताता है।

सभी एक साथ, मैं यह उम्मीद करता हूं कि सभी मर्ज किए गए अवशेषों को इकट्ठा करें और उन्हें हटा दें।

जब मैं उपरोक्त कमांड चलाता हूं, तो मुझे हर मर्ज किए गए रिमोट के लिए निम्नलिखित प्राप्त होता है;

error: unable to delete 'origin/myBranch-1234': remote ref does not exist
error: unable to delete 'origin/myBranch-1235': remote ref does not exist
error: unable to delete 'origin/myBranch-1236': remote ref does not exist
error: unable to delete 'origin/myBranch-1237': remote ref does not exist
... etc

हालांकि ये उपाय मौजूद हैं और मैं उनमें से प्रत्येक की जांच कर सकता हूं। कई साइटें और लोग सलाह देते हैं कि मैं git fetch --pruneलापता संदर्भों को साफ करने के लिए दौड़ता हूं । यह कुछ नहीं करता है क्योंकि इन सभी के अवशेष मौजूद हैं।

तो मैं आपसे पूछता हूं, प्रिय स्टैक एक्सचेंज;

  • मैं एक रिमोट क्यों हटा सकता हूं, लेकिन कई नहीं?
  • क्या मेरी आज्ञा सही है?

मुझे लगता है कि मुझे कुछ छोटा याद आ रहा है। हर बार जब मैं इस पर शोध करता हूं, तो ऐसा लगता है कि मैं इसे सही तरीके से कर रहा हूं, लेकिन मुझे उपरोक्त त्रुटियां हो रही हैं।

जवाबों:


226

आपको पहले दूरस्थ शाखाओं के अपने स्थानीय "कैश" को प्रून करने की आवश्यकता हो सकती है। चलाने की कोशिश करें:

git fetch -p origin

हटाने से पहले।


2
यह मेरे लिए हल, धन्यवाद! हालाँकि, जब मैं बिना लाया गया तो यह अपडेट क्यों नहीं हो रहा है --prune? मेरी राय में यह बहुत भ्रामक है
dave0688

6
एक खोज से यहां पहुंचने वाले लोगों के लिए बस एक नोट - जबकि यह स्पष्ट रूप से बहुमत के लिए उपयोगी है जो यहां उतरते हैं, यह वास्तव में मूल मुद्दे के संदर्भ में सही नहीं है - ओपी की समस्या यह थी कि उनकी कमान गलत तरीके origin/से शाखा नामों में शामिल है, जैसा कि वर्णित है / अन्य उत्तरों में हल किया गया।
क्यूपॉन्टाटी

104

क्या उन शाखाओं को रिमोट (मूल) से हटा दिया जाता है? यदि हाँ, तो आप बस कर सकते हैं

git fetch --prune origin

अन्यथा आप स्थानीय रूप से उन्हें हटाने के बाद भी वापस आ सकते हैं।

अपडेट: अपने आदेश को देखते हुए, ऐसा लगता है कि आप इसे गलत तरीके से बना रहे हैं। आप शायद चाहते हैं

git push origin --delete myBranch-1234

लेकिन इसके बजाय आप कुछ ऐसा कर रहे हैं

git push origin --delete origin/myBranch-1234

कोई भी शाखा मूल में नहीं निकाली जाती है। मैं उनमें से किसी का भी चेकआउट कर सकता हूं।
Jqw

1
हां, क्योंकि आप दूसरे मामले में विभिन्न कमांड निष्पादित करते हैं।
मैकोला ग्वारोव

1
मैं आपकी बात नहीं समझता। मुझे पता है कि मैं दो अलग-अलग कमांड का उपयोग कर रहा हूं। दूसरा मामला सभी मर्ज किए गए रीमेक के साथ मिल git branch -r --mergedरहा है और फिर मैं उन्हें हटाने की कोशिश कर रहा हूं xargs git push origin --delete। कमांड यह हटाने की कोशिश कर रहा है कि सिवाय इसके कि वह सोचता है remote ref does not exist
Jqw

1
आपके दूसरे, पाइप्ड कमांड में, xargsयह देखने के लिए कि क्या वास्तव में निष्पादित किया गया है , के ठीक बगल में प्रतिध्वनि डालें ।
मायकोला गुरोवो

2
@Jqw आप origin/शाखा के नाम पर उपसर्ग शामिल नहीं कर सकते , पहले से ही जानते हैं कि आप मूल शाखाओं के साथ काम कर रहे हैं जब से आप चल रहे हैं git push origin। माइकोला का सुझाव कमांड के अंतिम भाग को बनाने के xargs echoबजाय था echo xargs [...]
मैथ्यू पढ़ें

15

sed'मूल /' भाग को हटाने के लिए उपयोग करें और एक lttile xargsभाग को बदलें ।

git branch -r --merged | grep origin | grep -v -e master | sed s/origin\\/// |  xargs -I{} git push origin --delete {}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.