Git रिपॉजिटरी से सभी टैग हटाएं


224

मैं एक जीआईटी भंडार से सभी टैग को हटाना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

स्थानीय रूप git tag -d tagnameसे टैग हटाने का उपयोग करना tagname, और git push --tagsमैं git प्रदाता पर टैग अपडेट करना।

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

git tag -d *

लेकिन मुझे लगता है कि *वर्तमान निर्देशिका से फ़ाइलों का मतलब है।

$ git tag -d *
error: tag 'file1' not found.
error: tag 'file2' not found.
...

विचार करें कि मेरे पास बहुत सारे टैग हैं, और मैं उन्हें, सभी को हटाना चाहता हूं।

जवाबों:


419
git tag | xargs git tag -d

बस लिनक्स दर्शन का उपयोग करें जहां आप सब कुछ पाइप करते हैं। Windows पर समान कमांड के साथ git bash का उपयोग करें।


136
धन्यवाद। यह आदेश स्थानीय टैग हटाता है। मैं git tag -l | xargs -n 1 git push --delete originउन्हें रिमोट से डिलीट कर देता था।
Ionică Bizău

7
और विंडोज पर?
कोडमैनएक्स

7
@CoDEmanX विंडोज पर आपको एक ही कमांड के साथ git bash का उपयोग करना चाहिए।
inf3rno

2
दूरस्थ टैग को नहीं हटाता है, हजारों टैग के लिए बहुत धीमा है।
एड्रियन बेकर

1
'xargs' को विंडोज़ 10 पर एक आंतरिक या बाहरी कमांड के रूप में मान्यता प्राप्त नहीं है
गुलज़ार

207

दूरस्थ टैग हटाने के लिए (स्थानीय टैग हटाने से पहले) बस:

git tag -l | xargs -n 1 git push --delete origin

और फिर स्थानीय प्रतियां हटाएं:

git tag | xargs git tag -d

दर्जनों टैग्स के लिए रिमोट डिलीट का तरीका बहुत धीमा है।
ffxsam

5
यदि आपके पास बहुत सारे दूरस्थ टैग हैं, तो इसका उत्तर तेज़ है: stackoverflow.com/a/34395864/747044
adriaan

इस उत्तर में आदेशों का आदेश मानता है कि स्थानीय-केवल टैग नहीं हैं।
एक्यूमेनस

यह बहुत धीमा है, नीचे समाधान बेहतर है।
रूट फ़ूल

यदि आपको आवागमन के लिए पासफ़्रेज़ दर्ज करने की आवश्यकता है, तो इसके लिए प्रत्येक टैग के लिए पासफ़्रेज़ की आवश्यकता होती है। दूसरा उपाय बेहतर है।
kap

56

एक कमांड में सभी टैग को हटाने के लिए पुश करना अधिक कुशल हो सकता है। खासकर यदि आपके पास कई सौ हैं।

एक उपयुक्त गैर-विंडोज शेल में, सभी दूरस्थ टैग हटाएं:

git tag | xargs -L 1 | xargs git push origin --delete

फिर सभी स्थानीय टैग हटाएं:

git tag | xargs -L 1 | xargs git tag --delete

यह तब तक ठीक होना चाहिए जब तक आपके पास 'आपके टैग नामों में नहीं है। उसके लिए, निम्न आदेश ठीक होने चाहिए।

git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git push origin --delete
git tag | xargs -I{} echo '"{}"' | tr \\n \\0 | xargs --null git tag --delete

पंक्तियों की सूची लेने के अन्य तरीके, उन्हें उद्धरणों में लपेटना, उन्हें एक पंक्ति बनाना और फिर उस पंक्ति को एक कमांड में पास करना संभवतया मौजूद है। इसे ध्यान में रखते हुए अंतिम बिल्ली की त्वचा का वातावरण और सभी है।


3
मेरे पास कई हजार टैग थे, एक दूरस्थ क्लाउड रेपो से एक-एक करके उन्हें हटाने में दिन लग रहे थे, जिसे हल कर दिया गया।
एड्रियन बेकर

क्या करता xargs -L 1है?
यमट

-L अधिकतम-लाइनें - max-lines [= max-lines] -l [max-lines] प्रति कमांड लाइन में अधिकांश अधिकतम-लाइनों गैर-रिक्त इनपुट लाइनों का उपयोग करें। '-L' के लिए, यदि लोप किया गया है तो अधिकतम-पंक्तियाँ 1 में चूक जाती हैं। '-L' के लिए, तर्क अनिवार्य है। लाइनों को गिनने के उद्देश्य से ट्रेलिंग ब्लैंक एक इनपुट लाइन को तार्किक रूप से अगली इनपुट लाइन पर जारी रखने का कारण बनता है। इंप्लाइज '-x'। इस विकल्प का '-l' रूप POSIX- अनुपालन '-L' विकल्प के पक्ष में चित्रित किया गया है। gnu.org/software/findutils/manual/html_node/find_html/…
रिचर्ड ए क्वाडलिंग

@RichardAQuadling ठीक है, लेकिन इसका उत्तर में क्या प्रभाव पड़ता है? git tagटैग प्रति पंक्ति, एक प्रति पंक्ति, और फिर xargs -L 1उन्हें प्रति पंक्ति एक आउटपुट देता है, तो यह किस लिए है?
यमदूत

हममम। इस संदर्भ में कुछ भी नहीं! चीजों को छूने के अलावा अन्य चीजें धीमी करें!
रिचर्ड ए क्वाडलिंग

24

PowerShell का उपयोग करने वाले Windows उपयोगकर्ताओं के लिए:

git tag | foreach-object -process { git tag -d $_ }

यह वापस लौटाए गए प्रत्येक लाइन के लिए git tagनिष्पादित करके सभी टैग हटा देता है git tag -d


23

स्टीफन के उत्तर को जोड़ना जो गायब था कि रिमोट से टैग कैसे हटाया जाए। विंडोज़ पॉवरशेल के लिए आप स्थानीय टैग द्वारा पहले रिमोट टैग को हटाने के लिए इसे चला सकते हैं।

git tag | foreach-object -process { git push origin --delete $_ }
git tag | foreach-object -process { git tag -d $_ }  

19

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

git ls-remote --tags --refs origin | cut -f2 | xargs git push origin --delete

"दूरस्थ" को अपने दूरस्थ हैंडलर नाम से बदलना न भूलें।


अति उत्कृष्ट! इससे उन सभी को एक ही बार में हटा दिया गया। अन्य कमांड हर 2 सेकंड में एक को हटा रहा था
फ्रीगर्ल

11

विंडोज़ उपयोगकर्ताओं के लिए:

यह git टैग चलाकर और उस सूची को git टैग -d को खिलाकर सभी स्थानीय टैग हटा देता है:

FOR /f "tokens=*" %a in ('git tag') DO git tag -d %a

(इस पर मिला: https://gist.github.com/RandomArray/fdaa42787895252d976b00 )


6

आप भी उपयोग कर सकते हैं:

git tag -d $(git tag)

यदि आपके पास बहुत सारे टैग हैं तो यह काम नहीं करेगा, जैसे हजारों
डिक्सन डी

इस मामले में आप कुछ इस तरह का उपयोग कर सकते हैं: git टैग -d $ (git टैग | हेड -n 999) और इसे एक्स बार निष्पादित करें
ViZeke

1

चूँकि ये सभी विकल्प केवल linux में काम करते हैं, यहाँ किसी से निपटने के लिए समान खिड़कियां हैं:

FOR /F usebackq %t IN (`git tag`) DO @git tag --delete %t

1

मुझे उपसर्ग वाले टैग को हटाना होगा

उदाहरण के लिए, मुझे टैग्स v0.0.1, v0.0.2, v0.0.3, v0.0.4, v0.0.5 को हटाना होगा

git tag -d $(git tag -l "v0.0.*")

उपसर्ग के साथ सभी टैग सूचीबद्ध करने के लिए

git tag -l "v0.0.*"

टैग हटाने के लिए

git tag -d $tag_names

इस तरह से पहला बयान काम करता है


त्वरित, सरल और प्रभावी। काम किया, धन्यवाद!
वेदरन मंडीज

0

यदि आपके पास बहुत सारे अपस्ट्रीम (मूल) टैग हैं, जिन्हें हटाने की आवश्यकता है

git tag | foreach-object -Parallel { 
git push origin --delete $_ 
git tag -d $_ 
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.