ลบแท็กทั้งหมดออกจากที่เก็บ Git


224

ฉันต้องการลบแท็กทั้งหมดออกจากที่เก็บ Git ฉันจะทำสิ่งนั้นได้อย่างไร

ใช้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

เพียงแค่ใช้ปรัชญา Linux ที่คุณท่อทุกอย่าง บน Windows ใช้ git bash ด้วยคำสั่งเดียวกัน


136
ขอบคุณ คำสั่งนี้จะลบแท็กท้องถิ่น ฉันใช้git tag -l | xargs -n 1 git push --delete originเพื่อลบออกจากระยะไกล
IonicăBizău

7
และบน Windows?
CodeManX

7
@CoDEmanX บน Windows คุณควรใช้ git bash ด้วยคำสั่งเดียวกัน
inf3rno

2
ไม่ลบแท็กระยะไกลรวมถึงแท็กหลายพันรายการช้ามาก
Adrian Baker

1
ไม่รู้จัก 'xargs' เป็นคำสั่งภายในหรือภายนอกบน windows 10
Gulzar

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

ลำดับของคำสั่งในคำตอบนี้จะถือว่าไม่มีแท็กเฉพาะที่เท่านั้น
คิวเมนตัส

ช้าเกินไปวิธีแก้ปัญหาด้านล่างดีกว่า
Root Fool

หากคุณต้องการป้อนข้อความรหัสผ่านสำหรับการส่งข้อความคุณต้องป้อนข้อความรหัสผ่านสำหรับแต่ละแท็ก ทางออกอื่นดีกว่า
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
ฉันมีแท็กหลายพันแท็กลบพวกเขาทีละคนจาก repo คลาวด์ระยะไกลใช้เวลาหลายวันซึ่งสิ่งนี้แก้ไขได้
Adrian Baker

อะไรxargs -L 1ทำอย่างไร
ymett

-L max-lines - max-lines [= max-lines] -l [max-lines] ใช้ที่ max-lines ส่วนใหญ่บรรทัดอินพุตไม่ว่างต่อบรรทัดคำสั่ง สำหรับ '-l', ค่าเริ่มต้นสูงสุดคือ 1 หากไม่ระบุ สำหรับ '-L' จะต้องมีการโต้แย้ง ช่องว่างต่อท้ายทำให้บรรทัดอินพุตถูกดำเนินการทางตรรกะต่อไปยังบรรทัดอินพุตถัดไปเพื่อจุดประสงค์ในการนับบรรทัด หมายถึง '-x' รูปแบบ '-l' ของตัวเลือกนี้ถูกคัดค้านเนื่องจากตัวเลือก '-L' ที่สอดคล้องกับ POSIX gnu.org/software/findutils/manual/html_node/find_html/ …
Richard A Quadling

@RichardAQuadling Ok แต่มีผลกระทบอะไรบ้างในคำตอบ git tagส่งคืนแท็กหนึ่งรายการต่อบรรทัดจากนั้นxargs -L 1ส่งออกแท็กหนึ่งรายการต่อบรรทัดดังนั้นจะมีผลอย่างไร
ymett

อืมม ดูเหมือนจะไม่มีอะไรในบริบทนี้! นอกจากทำให้สัมผัสช้าลง!
Richard A Quadling

24

สำหรับผู้ใช้ Windows ที่ใช้ PowerShell:

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

เป็นการลบแท็กทั้งหมดที่ส่งคืนgit tagโดยการดำเนินการgit tag -dสำหรับแต่ละบรรทัดที่ส่งคืน


23

การเพิ่มคำตอบของ Stefan ที่ขาดวิธีลบแท็กจากระยะไกล สำหรับ windows powershell คุณสามารถเรียกใช้สิ่งนี้เพื่อลบแท็กระยะไกลก่อนตามด้วยแท็กท้องถิ่น

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

19

หากคุณไม่มีแท็กใน repo ในพื้นที่ของคุณคุณสามารถลบแท็กระยะไกลได้โดยไม่ต้องนำไปใช้กับ repo ในพื้นที่ของคุณ

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

อย่าลืมแทนที่ "ต้นกำเนิด" เป็นชื่อตัวจัดการระยะไกลของคุณ


ยอดเยี่ยม สิ่งนี้จะลบพวกเขาทั้งหมดในครั้งเดียว คำสั่งอื่น ๆ กำลังลบคำสั่งหนึ่งทุก 2 วินาที
fregante


6

คุณยังสามารถใช้:

git tag -d $(git tag)

สิ่งนี้จะไม่ทำงานหากคุณมีแท็กจำนวนมากเช่นหลายพัน
DixonD

ในกรณีนี้คุณสามารถใช้สิ่งที่ต้องการ: git tag -d $ (git tag | head -n 999) และดำเนินการ x ครั้ง
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

นั่นเป็นวิธีที่คำสั่งแรกทำงาน


รวดเร็วง่ายและมีประสิทธิภาพ ทำงานได้ดีขอบคุณ!
Vedran Mandić

0

Powershell v7 รองรับ foreach แบบขนานหากคุณมีแท็กอัปสตรีม (ต้นทาง) จำนวนมากที่คุณต้องลบ:

git tag | foreach-object -Parallel { 
git push origin --delete $_ 
git tag -d $_ 
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.