2013-10-23 23 views
140

Tôi muốn xóa tất cả các thẻ khỏi kho lưu trữ Git. Làm thế nào tôi có thể làm điều đó?Xóa tất cả các thẻ khỏi kho Git

Sử dụng git tag -d tagname xóa thẻ tagname tại địa phương và sử dụng git push --tags Tôi cập nhật thẻ trên nhà cung cấp git.

tôi đã cố gắng:

git tag -d * 

Nhưng tôi thấy rằng * nghĩa các tập tin từ thư mục hiện hành.

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

Hãy xem xét tôi có nhiều thẻ và tôi muốn xóa tất cả.

Trả lời

255
git tag | xargs git tag -d 

Đơn giản chỉ cần sử dụng triết lý Linux nơi bạn nói mọi thứ. Trên Windows, sử dụng lệnh git bash với cùng lệnh.

+82

Cảm ơn. Lệnh này xóa các thẻ cục bộ. Tôi đã sử dụng 'git tag -l | xargs -n 1 git push --xóa gốc' để xóa chúng khỏi điều khiển từ xa. –

+1

@John ツ vui vì bạn có thể hiểu triết lý của Linux: P –

+4

Và trên Windows? – CoDEmanX

107

Để xóa thẻ từ xa (trước khi xóa thẻ địa phương) chỉ cần làm:

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

và sau đó xóa các bản sao địa phương:

git tag | xargs git tag -d 

Lưu ý: Thêm câu trả lời này cho nhân viên của Google trong tương lai.

+0

Đang hoạt động ... tnx :) – deanpodgornik

+0

Xóa từ xa là quá chậm đối với hàng tá thẻ. – ffxsam

+0

Câu trả lời này nhanh hơn nếu bạn có nhiều thẻ từ xa: http://stackoverflow.com/a/34395864/747044 – harianus

16

Đối với Windows người dùng sử dụng PowerShell:

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

Thao tác này sẽ xóa tất cả các thẻ được trả về bởi git tag bằng cách thực hiện git tag -d cho mỗi dòng được trả về.

30

Có thể sẽ hiệu quả hơn khi đẩy xóa tất cả các thẻ trong một lệnh. Đặc biệt nếu bạn có vài trăm.

Trong một phù hợp không cửa sổ shell, xóa tất cả các thẻ từ xa:

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

Sau đó xóa tất cả các thẻ địa phương:

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

này nên được OK miễn là bạn không có một ' trong tên thẻ của bạn. Đối với điều đó, các lệnh sau đây sẽ được OK.

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 

Cách khác để lấy danh sách các dòng, đưa chúng vào dấu ngoặc kép, biến chúng thành một dòng và sau đó chuyển dòng đó sang lệnh có thể tồn tại. Xem xét đây là môi trường da mèo tối ưu và tất cả.

+3

Tôi đã có hàng ngàn thẻ, xóa từng cái một từ một repo trên đám mây từ xa đã mất nhiều ngày, điều này đã được giải quyết. –

18

Thêm vào câu trả lời của Stefan bị thiếu cách xóa thẻ từ xa.Đối với các cửa sổ, bạn có thể chạy lệnh này để xóa các thẻ từ xa trước, sau đó là các thẻ cục bộ.

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

Bạn cũng có thể sử dụng:

git tag -d $(git tag) 
0

Nếu bạn không có các thẻ trong repo địa phương của bạn, bạn có thể xóa thẻ từ xa mà không cần phải mang nó đến repo địa phương của bạn.

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

Đừng quên thay thế "origin" thành tên trình xử lý từ xa của bạn.

Các vấn đề liên quan