आप एक Git टैग को कैसे हटाते हैं जिसे पहले ही धकेल दिया गया है?
आप एक Git टैग को कैसे हटाते हैं जिसे पहले ही धकेल दिया गया है?
जवाबों:
आपको दूरस्थ टैग नाम के लिए 'खाली' संदर्भ को धकेलना होगा:
git push origin :tagname
या, अधिक स्पष्ट रूप से , --delete
विकल्प का उपयोग करें (या -d
यदि आपका git संस्करण 1.8.0 से पुराना है):
git push --delete origin tagname
ध्यान दें कि git में टैग नेमस्पेस और ब्रांच नेमस्पेस है ताकि आप एक ब्रांच के लिए और एक टैग के लिए एक ही नाम का उपयोग कर सकें। यदि आप यह सुनिश्चित करना चाहते हैं कि आप टैग के बजाय गलती से शाखा को हटा नहीं सकते हैं, तो आप पूर्ण रेफ निर्दिष्ट कर सकते हैं जो कभी भी शाखा को नहीं हटाएगा:
git push origin :refs/tags/tagname
यदि आपको स्थानीय टैग हटाने की आवश्यकता है, तो उपयोग करें:
git tag --delete tagname
एक दूरस्थ रिपॉजिटरी में एक शाखा, टैग या अन्य रेफरी को पुश करना "जिसमें रेपो, क्या स्रोत, क्या गंतव्य है?" निर्दिष्ट करना शामिल है।
git push remote-repo source-ref:destination-ref
एक वास्तविक विश्व उदाहरण जहां आप अपनी मास्टर शाखा को मूल की मास्टर शाखा में धकेलते हैं:
git push origin refs/heads/master:refs/heads/master
डिफ़ॉल्ट रास्तों के कारण, इसे छोटा किया जा सकता है:
git push origin master:master
टैग उसी तरह काम करते हैं:
git push origin refs/tags/release-1.0:refs/tags/release-1.0
जिसे छोटा भी किया जा सकता है:
git push origin release-1.0:release-1.0
स्रोत रेफ (कर्नल से पहले का हिस्सा) को छोड़ कर, आप दूरस्थ छोर पर रेफ को हटाते हुए गंतव्य के लिए 'कुछ नहीं' को धक्का देते हैं।
git push --delete origin tag1 tag2
। वही स्थानीय टैग हटाने के लिए मान्य हैgit tag -d tag1 tag2
tag
केवल एक ही प्रतिबद्ध से जुड़ा है। उसके कारण शाखा का नाम अप्रासंगिक है।
git tag -d `git tag`
सभी स्थानीय टैग हटा दिए जाएंगे। समान रूप से git push --delete origin `git tag`
यह मानने के लिए लागू होता है कि आपने दूरस्थ टैग को स्थानीय रूप से खींचा है। यह एक परीक्षण वातावरण में आसान था।
एक और सीधा रास्ता है
git push --delete origin YOUR_TAG_NAME
इस स्थिति में IMO उपसर्ग बृहदान्त्र सिंटैक्स थोड़ा अजीब है
git push --delete origin "TAGNAME"
:, जहां TAGNAME मूल टैग का नाम है।
tag
यह सुनिश्चित करने के लिए अपने टैग नाम से पहले शब्द डाल सकते हैं कि आपको टैग मिल सकता है, शाखा नहीं।
refs/tags/
, इस तरह: refs/tags/v2.3.1
।
यदि आपके पास v0.1.0
हटाने के लिए एक रिमोट टैग है, और आपका रिमोट है origin
, तो बस:
git push origin :refs/tags/v0.1.0
यदि आपको स्थानीय स्तर पर टैग हटाने की आवश्यकता है:
git tag -d v0.1.0
हटाने के लिए गिट के असामान्य वाक्यविन्यास के स्पष्टीकरण के लिए एडम फ्रेंको का जवाब देखें :
।
fatal: remote part of refspec is not a valid name in :/refs/tags/0.0.1
...?
:tagname
रिमोट डिलीट के लिए काम करना चाहिए।
सभी स्थानीय टैग हटाएं और दूरस्थ टैग की सूची प्राप्त करें :
git tag -l | xargs git tag -d
git fetch
सभी दूरस्थ टैग निकालें
git tag -l | xargs -n 1 git push --delete origin
स्थानीय टैग्स को साफ करें
git tag -l | xargs git tag -d
दूरस्थ रिपॉजिटरी से टैग हटाने के लिए:
git push --delete origin TAGNAME
आप स्थानीय रूप से टैग हटाना चाहते हैं:
git tag -d TAGNAME
git push --delete origin TAGNAME && git tag -d TAGNAME
अपने टर्मिनल से, यह करें:
git fetch
git tags
git tag -d {tag-name}
git push origin :refs/tags/{tag-name}
अब Github.com पर जाएं और ताज़ा करें, वे गायब हो गए।
git tag -d your_tag_name
git push origin :refs/tags/your_tag_name
your_tag_name
से हटाती है।your_tag_name
से हटाती है।git tag -d 12345
git push origin :refs/tags/12345
git push --delete origin tagName
git tag -d tagName
बस ध्यान दें कि, यदि आपके पास रिमोट टैग के रूप में नामित एक दूरस्थ शाखा है, तो ये आदेश अस्पष्ट हैं:
git push origin :tagname
git push --delete origin tagname
इसलिए आपको टैग हटाने के लिए इस कमांड का उपयोग करना चाहिए:
git push origin :refs/tags/<tag>
और यह एक शाखा को हटाने के लिए है:
git push origin :refs/heads/<branch>
यदि नहीं, तो आपको इस तरह एक त्रुटि मिलेगी:
error: dst refspec <tagname> matches more than one.
error: failed to push some refs to '<repo>'
11,000 से अधिक टैग हटाने की आवश्यकता के दौरान इन उत्तरों को पढ़ने के बाद, मैंने इन विधियों को भरोसा करना या xargs
बहुत लंबा लेना सीखा , जब तक कि आपके पास जलाने के लिए घंटे न हों।
स्ट्रगल, मैंने दो और तेज़ तरीके ढूंढे। दोनों के लिए, उन टैगों की सूची बनाना git tag
या शुरू करना, git ls-remote --tags
जिन्हें आप रिमोट पर हटाना चाहते हैं। नीचे दिए गए उदाहरणों में आप sorting_proccessing_etc
किसी भी grep
आईएनजी, sort
इंजी, tail
आईएनजी या head
आईएनजी को बदल सकते हैं ( जैसे grep -P "my_regex" | sort | head -n -200
आदि )।
xargs
, और एक समय में कम से कम कई हजार टैग के साथ काम करता है ।git push origin $(< git tag | sorting_processing_etc \
| sed -e 's/^/:/' | paste -sd " ") #note exclude "<" for zsh
यह कैसे काम करता है? टैग की सामान्य, लाइन-अलग-अलग सूची को अंतरिक्ष-अलग किए गए टैगों की एक पंक्ति में बदल दिया जाता है, प्रत्येक को :
इसके साथ जोड़ा जाता है। । ।
tag1 becomes
tag2 ======> :tag1 :tag2 :tag3
tag3
git push
इस प्रारूप टैग के साथ उपयोग करने से प्रत्येक दूरस्थ रेफरी में कुछ भी नहीं धकेलता है , इसे मिटा देता है (इस तरह से धक्का देने का सामान्य प्रारूप है local_ref_path:remote_ref_path
)।
इन दोनों तरीकों के बाद, आप शायद अपने स्थानीय टैग भी हटाना चाहते हैं। यह बहुत तेज़ है इसलिए हम उपयोग करने के लिए वापस जा सकते हैं xargs
और git tag -d
, जो पर्याप्त है।
git tag | sorting_processing_etc | xargs -L 1 git tag -d
या रिमोट डिलीट के समान:
git tag -d $(< git tag | sorting_processing_etc | paste -sd " ")
यदि आप SourceTree - एक महान Git GUI का उपयोग करते हैं - तो आप आसानी से कमांड लाइन के बिना निम्न कार्य कर सकते हैं:
Your_TAG_NAME को अब आपकी स्थानीय रिपॉजिटरी से निकाल दिया जाएगा और सभी रीमोट - यह GitHub, BitBucket, या जहाँ भी आपने उस रिपॉजिटरी के लिए रिमोट के रूप में सूचीबद्ध किया है, हो सकता है।
इसके अलावा, यदि आपने स्थानीय रूप से कोई टैग हटा दिया है, लेकिन दूरस्थ उत्पत्ति पर नहीं, और आप इसे हर जगह हटाना चाहते हैं, तो बस एक नया टैग बनाएं जिसमें समान नाम हो और मूल के समान प्रतिबद्ध हो। फिर, हर जगह हटाने के लिए ऊपर दिए गए चरणों को दोहराएं।
यदि आपने release01
Git रिपॉजिटरी में एक टैग बनाया है, तो आप निम्न कार्य करके इसे अपनी रिपॉजिटरी से निकाल देंगे:
git tag -d release01
git push origin :refs/tags/release01
एक व्यापारिक भंडार से हटाने के लिए:
hg tag --remove featurefoo
कृपया संदर्भ https://confluence.atlassian.com/pages/viewpage.action?pageId=282175551 पर देखें
यदि आप PowerShell का उपयोग कर रहे हैं, और आप उनमें से एक गुच्छा हटाना चाहते हैं:
# Local tags:
git tag -l | foreach { git tag -d $_ }
# Remote tags:
git tag -l | foreach { git push --delete origin $_ }
बेशक, आप उन्हें हटाने से पहले फ़िल्टर भी कर सकते हैं:
git tag -l | Where-Object { $_ -like "build-*" } | foreach { git tag -d $_ }
जैसा कि @ क्यूबा ने सुझाव दिया था, मैंने इस उत्तर को अपने मूल से अलग कर दिया है:
xargs
और ट्विकिंग के साथ और अधिक पैमाने पर हो सकती है। यह जीथब एपीआई , एक व्यक्तिगत एक्सेस टोकन का उपयोग करता है , और उपयोगिता का लाभ उठाता है parallel
।git tag | sorting_processing_etc | parallel --jobs 2 curl -i -X DELETE \
https://api.github.com/repos/My_Account/my_repo/git/refs/tags/{} -H
\"authorization: token GIT_OAUTH_OR_PERSONAL_KEY_HERE\" \
-H \"cache-control: no-cache\"`
parallel
कई ऑपरेटिंग मोड हैं, लेकिन आम तौर पर किसी भी कमांड को आप इसे देते हैं, जबकि आप प्रक्रियाओं की संख्या पर सीमा निर्धारित करने की अनुमति देते हैं। आप --jobs 2
तेजी से संचालन की अनुमति देने के लिए पैरामीटर को बदल सकते हैं , लेकिन मुझे गितुब की दर सीमाओं के साथ समस्या थी , जो वर्तमान में 5000 / घंटा है, लेकिन साथ ही साथ एक अनिर्दिष्ट अल्पकालिक सीमा भी है।
इसके बाद, आप शायद अपने स्थानीय टैग भी हटाना चाहते हैं। यह बहुत तेज़ है इसलिए हम उपयोग करने के लिए वापस जा सकते हैं xargs
और git tag -d
, जो पर्याप्त है।
git tag | sorting_processing_etc | xargs -L 1 git tag -d
दूसरे उत्तर बताते हैं कि इसे कैसे पूरा किया जाए, लेकिन आपको इसके परिणामों को ध्यान में रखना चाहिए क्योंकि यह एक दूरस्थ भंडार है।
जीएटी टैग मैन पेज, ऑन रीटैगिंग सेक्शन में, रिमोट रेपो के परिवर्तन के अन्य उपयोगकर्ताओं को सूचित करने के तरीके की एक अच्छी व्याख्या है। यहां तक कि वे यह भी बताने के लिए एक उपयोगी घोषणा पत्र देते हैं कि दूसरों को आपके परिवर्तन कैसे प्राप्त करने चाहिए।
मैं उन सभी टैगों को हटाना चाहता था, जो एक पैटर्न से मेल खाते हैं, ताकि मैं उत्पादन टैग के सभी अंतिम महीनों को हटा सकूं, लेकिन यहां मुझे बहुत सफलता मिली:
डिलीट से सभी रिमोट टैग और एक्सक्लूसिव एक्सप्रेशन हटाएं
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs -n 1 git push --delete origin
सभी स्थानीय टैग हटाएं और अभिव्यक्ति को हटाएं हटाएं
git tag -l | grep -P '^(?!Production-2017-0[89])' | xargs git tag -d
स्थानीय और मूल दोनों स्थानों से दिए गए टैग को हटाने के लिए सरल स्क्रिप्ट। एक चेक के साथ यदि टैग वास्तव में मौजूद है।
if [ $(git tag -l "$1") ]; then
git tag --delete $1
git push --delete origin $1
echo done.
else
echo tag named "$1" was not found
fi
कैसे इस्तेमाल करे:
$> git-tag-purge.sh टैग_नाम)
किसी चीज के लिए बहुत काम की तरह लगता है xargs
पहले से ही है। इस थ्रेड के माध्यम से पीछे मुड़कर, मैं xargs
आपको उस सुस्ती का अनुमान लगा रहा हूं जो आपने अनुभव किया है क्योंकि मूल उत्तर का उपयोग xargs -n 1
तब किया जाता है जब वास्तव में इसकी आवश्यकता नहीं थी।
यह इसके अलावा आपकी विधि के बराबर है xargs
स्वचालित रूप से अधिकतम कमांड लाइन लंबाई से संबंधित है:
git tag | sorting_processing_etc | xargs git push --delete origin
xargs
समानांतर में भी प्रक्रियाओं को चला सकते हैं। विधि 2 के साथxargs
:
git tag | sorting_processing_etc | xargs -P 5 -n 100 git push --delete origin
प्रत्येक प्रक्रिया में अधिकतम 100 तर्कों को संभालने के लिए उपर्युक्त अधिकतम 5 प्रक्रियाओं का उपयोग करता है। आप अपनी आवश्यकताओं के लिए सबसे अच्छा काम करने के लिए तर्कों के साथ प्रयोग कर सकते हैं।
यदि आपके पास # वर्ण से शुरू होने वाला एक टैग है , उदाहरण के लिए #ST002
, आप पा सकते हैं कि आप सामान्य पैटर्न का उपयोग करके हटाने में असमर्थ हैं। अर्थात
git tag -d #STOO2
टैग हटाना नहीं होगा, लेकिन एक में यह लपेटकर स्ट्रिंग शाब्दिक इसलिए की तरह
git tag -d "#ST002" or git tag -d '#ST002'
वह इसे हटा दिया जाएगा। इसकी उम्मीद करने से किसी ऐसे व्यक्ति को मदद मिलेगी जिसने टैग नाम लिखने के लिए # का उपयोग करने की गलती की है ।
रिमोट के साथ खिलवाड़ किए बिना स्थानीय स्तर पर इसका परीक्षण करने के लिए यहां एक स्थानीय टेस्टकेस है:
~/p $ mkdir gittest
~/p/git $ cd gittest/
~/p/gittest $ git init
Initialized empty Git repository in /Users/local_user/p/gittest/.git/
~/p/gittest $ touch testfile.txt
~/p/gittest $ git add testfile.txt
~/p/gittest $ git commit -m "initial commit"
[master (root-commit) 912ce0e] initial commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 testfile.txt
~/p/gittest $ git tag
~/p/gittest $ git tag -a testtag
~/p/gittest $ git tag
testtag
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
~/p/gittest $ cd ..
~/p $ mkdir gitbare
~/p $ cd gitbare
~/p/gitbare $ git init --bare
Initialized empty Git repository in /Users/local_user/p/gitbare/
~/p/gitbare $ cd ..
~/p $ cd gittest/
~/p/gittest $ git remote add origin /Users/local_user/p/gitbare
~/p/gittest $ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
~/p/gittest $ git push origin testtag
Counting objects: 1, done.
Writing objects: 100% (1/1), 163 bytes | 163.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To /Users/local_user/p/gitbare
* [new tag] testtag -> testtag
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
b0a6c15cabb990e6d6c46f762891b63608d962f3 refs/tags/testtag
~/p/gittest $ git push -d origin testtag
To /Users/local_user/p/gitbare
- [deleted] testtag
~/p/gittest git tag -d testtag
Deleted tag 'testtag' (was b0a6c15)
~/p/gittest $ git show-ref
912ce0e40635c90241fdab756dce7ea34938de57 refs/heads/master
912ce0e40635c90241fdab756dce7ea34938de57 refs/remotes/origin/master
~/p/gittest
नमस्ते मैं केवल एक उपनाम साझा करना चाहता था जो एक ही काम करता है:
निम्नलिखित को अपने ~ / .gitconfig में जोड़ें
[alias]
delete-tag = "!f() { \
echo 'deleting tag' $1 'from remote/origin ausing command: git push --delete origin tagName;'; \
git push --delete origin $1; \
echo 'deleting tag' $1 'from local using command: git tag -d tagName;'; \
git tag -d $1; \
}; f"
उपयोग इस तरह दिखता है:
-->git delete-tag v1.0-DeleteMe
deleting tag v1.0-DeleteMe from remote/origin ausing command: git push --delete origin tagName;
To https://github.com/jsticha/pafs
- [deleted] v1.0-DeleteMe
deleting tag v1.0-DeleteMe from local using command: git tag -d tagName;
Deleted tag 'v1.0-DeleteMe' (was 300d3ef22)