Tags là một tính năng tổ chức được Git cung cấp để giúp đánh dấu các điểm cụ thể trong lịch sử Git. Đặc biệt với các repository được chia sẻ, tags thường được sử dụng để đánh dấu các phiên bản release, và có thể giúp các cộng tác viên mới hiểu được các cột mốc quan trọng trong lịch sử dự án.
Để tạo một lightweight tag trỏ đến commit gần nhất trên branch hiện tại, hãy sử dụng:
git tag <tag-name>
Ví dụ:
git tag v1.0.0
Lightweight tag chỉ là một con trỏ đến một commit cụ thể, không chứa thông tin bổ sung.
Để tạo một annotated tag chứa thông tin bổ sung như tên người tạo tag, địa chỉ email, ngày tháng và mô tả, hãy sử dụng:
git tag <tag-name> -a -m 'Mô tả tag'
Ví dụ:
git tag v1.0.0 -a -m 'Release version 1.0.0 với các tính năng mới'
Annotated tag được khuyến nghị sử dụng vì chúng chứa nhiều thông tin hữu ích và có thể được ký bằng GPG để xác thực.
Theo mặc định, lệnh tag liên kết tag với commit gần nhất trên branch hiện đang được chọn. Để tag một commit xa hơn trong lịch sử, hãy truyền mã hash của commit:
git tag <tag-name> <commit-hash>
Ví dụ:
git tag v0.9.0 abc1234
Bạn cũng có thể tạo annotated tag cho một commit cụ thể:
git tag <tag-name> -a -m 'Mô tả tag' <commit-hash>
Để xem danh sách các tag hiện có được sắp xếp theo thứ tự bảng chữ cái, hãy thực thi:
git tag
Output:
v1.0.0
v1.1.0
v1.2.0
v2.0.0
Bạn cũng có thể lọc tags bằng pattern:
git tag -l "v1.*"
Lệnh này sẽ chỉ hiển thị các tag bắt đầu bằng "v1.".
Để xem thông tin về một tag, chẳng hạn như ngày tháng, người tạo tag, và thông tin commit, hãy sử dụng:
git show <tag-name>
Output cho annotated tag:
tag v1.0.0
Tagger: John Doe <john@example.com>
Date: Mon Jan 1 12:00:00 2024 +0000
Release version 1.0.0 với các tính năng mới
commit abc1234...
Author: John Doe <john@example.com>
Date: Mon Jan 1 11:00:00 2024 +0000
Initial commit
Output cho lightweight tag:
Với lightweight tag, git show sẽ chỉ hiển thị thông tin của commit mà tag trỏ đến.
Giống như branches và commits, tags chỉ tồn tại trong repository local của bạn cho đến khi chúng được push một cách rõ ràng.
Để push tất cả các tag lên remote repository:
git push --tags
Hoặc:
git push origin --tags
Để push một tag cụ thể:
git push <repo-label> <tag-name>
Ví dụ:
git push origin v1.0.0
Lưu ý: Khi push tags, chúng sẽ được chia sẻ với tất cả các thành viên trong team. Hãy đảm bảo tag name phù hợp và mô tả rõ ràng.
Để xóa một tag trong repository local:
git tag -d <tag-name>
Ví dụ:
git tag -d v1.0.0
Nếu tag đã được push lên remote, bạn cần xóa nó trên remote riêng biệt:
git push <repo-label> --delete <tag-name>
Hoặc sử dụng cú pháp ngắn gọn:
git push <repo-label> :refs/tags/<tag-name>
Ví dụ:
git push origin --delete v1.0.0
Việc xóa tag trên remote có thể ảnh hưởng đến các thành viên khác trong team. Hãy đảm bảo bạn đã thảo luận với team trước khi xóa tag đã được chia sẻ.
Annotated tags được khuyến nghị sử dụng vì chúng chứa nhiều thông tin hữu ích và có thể được ký bằng GPG.
Tags thường được sử dụng để đánh dấu các phiên bản release (ví dụ: v1.0.0, v2.1.3).
Tags là bất biến - một khi đã được tạo và push, bạn không nên thay đổi chúng. Nếu cần sửa, hãy xóa tag cũ và tạo tag mới.
Lightweight tags phù hợp cho các tag tạm thời hoặc cá nhân, trong khi annotated tags phù hợp cho các tag quan trọng cần được chia sẻ.
Bạn có thể checkout một tag cụ thể để xem code tại thời điểm đó, nhưng bạn sẽ ở trạng thái detached HEAD.
Tags cho phép bạn đánh dấu các điểm quan trọng trong lịch sử Git. Bạn có thể tạo lightweight tags hoặc annotated tags, liệt kê và xem thông tin tags, push tags lên remote, và xóa tags khi cần thiết.
Tags là một công cụ tổ chức mạnh mẽ, đặc biệt hữu ích để đánh dấu các phiên bản release và các cột mốc quan trọng trong dự án, giúp các thành viên trong team dễ dàng điều hướng lịch sử dự án.