Có 2 loại thẻ - lightweight
và annotated
. Thẻ trọng lượng nhẹ chỉ đơn thuần là refs trỏ đến một số đối tượng trong khi thẻ được chú thích là một đối tượng git riêng biệt và lưu trữ nhiều thông tin hơn như tác giả, người nhận, thông báo cam kết, v.v.
Khi bạn sử dụng git tag -a
để tạo thẻ , git đã tạo thẻ chú thích cho bạn.
^{}
là cú pháp được sử dụng để dereference thẻ. Nó được mô tả trong gitrevisions.
Khi được sử dụng với đối tượng thẻ, git sẽ đệ quy đệ quy lại thẻ cho đến khi tìm thấy đối tượng không phải thẻ.
Khi được sử dụng với các đối tượng phi tag, nó không làm bất cứ điều gì và tương đương với bỏ qua ^{}
Các refs/tags/v0.1.6
ref tại các điểm kho của bạn đến đối tượng thẻ bb944682f7f65272137de74ed18605e49257356c
, mà tại các điểm lần lượt đến 771a930dc0ba86769d6862bc4dc100acc50170fa
(đối tượng không phải thẻ) mà tôi đoán đang lưu trữ thông tin cam kết khi bạn tạo thẻ.
Vì vậy, khi bạn thực hiện refs/tags/v0.1.6^{}
, git sẽ bỏ qua thẻ và giải quyết thẻ thành 771a930dc0ba86769d6862bc4dc100acc50170fa
- đối tượng không gắn thẻ.
Ngoài ra còn có một lệnh git show-ref
có thể được sử dụng để chỉ liệt kê các thẻ, và dereference tùy chọn như sau, và trong trường hợp của bạn nên cho kết quả sau:
$ git show-ref --tags
bb944682f7f65272137de74ed18605e49257356c refs/tags/v0.1.6
a72251d945353a360087eb78ee75287c38a1c0e6 refs/tags/v0.1.7
$ git show-ref --tags --dereference
bb944682f7f65272137de74ed18605e49257356c refs/tags/v0.1.6
771a930dc0ba86769d6862bc4dc100acc50170fa refs/tags/v0.1.6^{}
a72251d945353a360087eb78ee75287c38a1c0e6 refs/tags/v0.1.7
d69e66d7c915b9682618b7f304b80cc0ae4c7809 refs/tags/v0.1.7^{}
Để khẳng định điều này, bạn có thể sử dụng git show
lệnh để cung cấp cho bạn thêm chi tiết về đối tượng git.
Đây là thông tin từ một trong các kho lưu trữ git thử nghiệm của tôi.
$ git show 43f9a98886ba873c0468c608f24c408b9991414f
tag v0.1
Tagger: Ash <[email protected]>
Date: Sun Jul 15 00:14:43 2012 -0700
Tagging Stable repo 0.1 :)
-----BEGIN PGP SIGNATURE-----
<PGP-SIGNATURE>
-----END PGP SIGNATURE-----
commit e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
Merge: 796efcd 58e3a4d
Author: Ash <[email protected]>
Date: Sun Jul 15 00:02:44 2012 -0700
Merge branch 'dev' into 'master' for stable 0.1.
$ git show e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
commit e55df25f2321a6b2c9a02fa80ccba7cbe3c38c08
Merge: 796efcd 58e3a4d
Author: Ash <[email protected]>
Date: Sun Jul 15 00:02:44 2012 -0700
Merge branch 'dev' into 'master' for stable 0.1.
Giải thích tuyệt vời, cảm ơn rất nhiều! – Andris
Giải thích này tốt hơn lời giải thích trong câu hỏi trùng lặp! – pedromanoel