2010-12-28 35 views
55

Tôi đã thấy các lệnh git describegit-name-rev nhưng tôi chưa quản lý để đưa chúng vào danh sách nhiều thẻ.Cách liệt kê tất cả các thẻ trỏ đến một cam kết cụ thể trong git

Ví dụ: Tôi có sha1 48eb354 và tôi biết các thẻ A và B trỏ đến nó. Vì vậy, tôi muốn có lệnh git git {something} 48eb354 sản xuất đầu ra tương tự như "A, B". Tôi không quan tâm đến việc biết tài liệu tham khảo liên quan đến các thẻ hoặc chi nhánh khác chỉ khớp chính xác cho thẻ.

Trả lời

33

git show-ref --tags -d | grep ^48eb354 | sed -e 's,.* refs/tags/,,' -e 's/\^{}//'

nên làm việc cho cả hai thẻ nhẹ và chú thích.

+0

Cảm ơn, công trình này! – Zitrax

+0

Cảm ơn. Chính xác những gì tôi muốn. – mrutyunjay

+0

Điều này phù hợp với git <1.7.10. Bạn có thể giải thích phần thứ hai của biểu thức sed không? '-e 's/\^{} //'' – Dave

4
git for-each-ref --format='%(objectname) %(refname:short)' refs/tags/ | 
    grep ^$commit_id | 
    cut -d' ' -f2

Đáng tiếc là không thể thực hiện dễ dàng hơn. Một lá cờ khác trên git tag để bao gồm các ID cam kết có thể thể hiện rằng tự nhiên yêu cầu git for-each-ref.

+1

Cảm ơn thông tin nhưng dường như tôi cũng không thể xem các thẻ bằng lệnh này. Sử dụng "git for-each-ref | grep 48eb354" đơn giản hơn cho 0 kết quả phù hợp. gitk mặt khác độc đáo liệt kê 2 thẻ ở phía trước của cam kết này. – Zitrax

+0

Dường như không hoạt động cho các thẻ được chú thích. –

1

Lệnh sau thực hiện công việc, nhưng trực tiếp phân tích cú pháp nội dung của thư mục .git và do đó có thể bị hỏng nếu định dạng kho git thay đổi.

grep -l -r -e '^48eb354' .git/refs/tags|sed -e 's,.*/,,' 
+0

Không liệt kê chúng, hoặc là nơi duy nhất tôi thấy sha1 nếu grepping toàn bộ thư mục .git nằm trong gitk.cache và logs/refs/remotes/origin/master. Làm thế nào đến gitk có thể liệt kê chúng? Tôi cũng nhận thấy rằng các thẻ tôi đang xem là các thẻ được chú thích, đây có thể là lý do tại sao hai câu trả lời hiện tại không hoạt động đối với tôi. – Zitrax

125

git tag --points-at HEAD

Hiển thị tất cả các thẻ tại HEAD, bạn cũng có thể thay thế TRỤ với bất kỳ id sha1.

+5

Có sẵn từ phiên bản 1.7.10: https://raw.github.com/gitster/git/master/Documentation/RelNotes/1.7.10.txt –

21

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

git tag --contains <commit> 

cho thấy tất cả các thẻ tại một số cam kết. Nó có thể được sử dụng thay vì:

git tag --points-at HEAD 

chỉ có sẵn từ 1.7.10.

+5

NB: 'git tag --contains' không chỉ hiển thị các thẻ trỏ đến cam kết, mà còn bao gồm bất kỳ thẻ nào sau này các thẻ có thể truy cập được từ đó. – staafl

+0

Ít nhất trong phiên bản 2.6.4, điều này chỉ trả về một thẻ duy nhất trỏ đến cam kết được chỉ định. Nó không trả lại tất cả. Câu trả lời ở trên bởi @max dường như hoạt động đúng cho nhiều thẻ. –

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