2012-01-09 41 views

Trả lời

90

Làm thế nào về điều này?

git show-ref --tags 
+5

Lưu ý, điều này sẽ không phân biệt giữa các thẻ có trọng lượng nhẹ và chú thích. Đối với thẻ trọng lượng nhẹ, thẻ sẽ hiển thị cam kết và đối với thẻ được chú thích, thẻ sẽ hiển thị băm của đối tượng thẻ. –

+12

Để hiển thị danh sách các thẻ có các tham chiếu dereferenced (trong trường hợp thẻ chú thích), hãy sử dụng 'git show-ref --tags -d'. Các thẻ không tham chiếu được postfixed với '^ {}'. –

3

Các thẻ phải có chữ ký và/hoặc tin nhắn. Các thẻ trọng lượng nhẹ không có đối tượng SHA1 và chỉ là các tham chiếu. Nếu không, hãy thử git show.

+1

'git show tag1' ' git show tag2' phù hợp nhất với tôi, cảm ơn :) –

7

Để có được SHA1 gọi bằng bất kỳ loại ref (chi nhánh, tag ...) sử dụng git rev-parse:

git rev-parse tag1^0 tag2^0 

Nó sẽ chỉ in đầy đủ SHA1s, trên dòng riêng biệt. Hậu tố ^0 là một cú pháp đặc biệt, để đảm bảo rằng điều này sẽ in SHA1 của cam kết được chỉ ra bởi thẻ, cho dù nó có chú thích hay không. (Thẻ được chú thích là các đối tượng ở bên phải của riêng chúng, có chứa con trỏ đến một cam kết cùng với siêu dữ liệu. Nếu bạn biết một thẻ được chú thích và muốn có thẻ SHA1, chỉ cần rời khỏi số ^0.)

Tất nhiên, bạn không nên thường xuyên làm điều này, vì bất kỳ lệnh Git nào chấp nhận một SHA1 cũng nên chấp nhận một thẻ!

+0

Câu trả lời hay nhất tại đây, cảm ơn @Jefromi. Lưu ý rằng trong trình bao Windows cmd, bất kỳ lệnh git nào sử dụng^cần phải được trích dẫn: ví dụ: git rev-parse "tag1^0" "tag2^0". – yoyo

8

Tôi có câu hỏi tương tự nhưng muốn có băm (một số) thẻ cụ thể. Tôi thấy rằng "show-ref" sẽ mất một danh sách các thẻ, vì vậy đây không được công việc:

% git show-ref v3.4.0.13-ga v3.4.0.13-base 
bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base 
79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga 

Tuy nhiên, một số thử nghiệm với "git chương trình" dẫn đến lệnh này:

% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base 
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first 
bfc7747 (tag: v3.4.0.13-base) commit message the second 

Kể từ Tôi quen thuộc hơn với việc sử dụng "show" hơn là "show-ref", tôi thấy dễ nhớ hơn và hữu ích hơn.

cũng Xem tóm tắt ngơi thoải mái tại How to tell which commit a tag points to in Git?.

10

Thẻ được chú thích có SHA − 1 riêng của chúng, vì vậy chúng tôi cần phải coi trọng chúng. Tuy nhiên thẻ trọng lượng nhẹ không thể bị hủy đăng ký vì chúng đã trỏ đến cam kết. Để giải quyết, chúng ta phải liệt kê cả và lọc các đối tượng cam kết:

git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname) 
%(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit 

quả với các thẻ nhẹ:

589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9 
e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8 
19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7 
7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6 
62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5 

quả với các thẻ chú thích:

e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{} 
1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{} 
3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{} 
1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{} 
454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{} 
+0

Sử dụng 'git log --tags --oneline --no-walk' cũng sẽ tự động chú thích thẻ được chú thích. :) – ADTC

21

Lệnh git tag là kém phát triển . Rất nhiều là mong muốn nhưng thiếu trong nó, như chi tiết thẻ đầy đủ và các thẻ theo thứ tự lịch sử cam kết.

Tôi thích này để thay thế, mang đến cho chính xác những gì tôi muốn, nhưng không thể nhận được từ git tag:

git log --oneline --decorate --tags --no-walk 

Điều này cho phép một cái nhìn mã màu rất đẹp của các thẻ theo thứ tự thời gian đảo ngược (vì nó sẽ ở trong nhật ký đầy đủ). Bằng cách đó, bạn không chỉ thấy các thẻ, bạn cũng sẽ thấy các băm viết tắt và các thông điệp cam kết của thẻ cam kết.


Tôi đã aliased nó để git tgit tags như sau:

git config --global alias.tags "log --oneline --decorate --tags --no-walk" 
git config --global alias.t "!git tags" 

Lưu ý: tôi đã phải sử dụng chuyển hướng bash cho git t như Git không hỗ trợ gọi một bí danh từ một bí danh khác (đó là một bummer).


Nếu bạn muốn xem ngày cam kết và thời gian, hãy thử:

git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s' 

Bạn có thể sử dụng định dạng ngày khác trong các tùy chọn --date cũng như hoàn toàn kiểm soát đầu ra để phù hợp với hương vị độc đáo của bạn trong tùy chọn --pretty. Cả hai tùy chọn đều được ghi chép đầy đủ trong git-log Documentation.

+0

Có vẻ như một câu trả lời rất hữu ích. Cảm ơn bạn. – Ceki

+2

Mặc dù không phải là những gì OP hỏi (hiển thị cam kết ** sha1 băm **) nó rất hữu ích vì các thông điệp cam kết có thể là tiện dụng là tốt. +1 từ tôi. –

+0

khéo léo, thx! –

-2
git show-ref [object] 

đối tượng có thể là cam/thẻ/cây/blob,

trong trường hợp của bạn chỉ cần:

git show-ref [tag_name] 
0
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags 

này đưa ra một danh sách của tất cả các cam kết cho thẻ. Thẻ được chú thích bị hủy đăng ký. Gửi cảm ơn here.

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