Tagging là một chức năng hữu ích trong Git giúp việc quản lý các phiên bản phát hành được linh hoạt và tiện lợi hơn. Cùng khám phá cách sử dụng Git tag hiệu quả để quản lý phiên bản trong mã nguồn, bao gồm hướng dẫn chi tiết về quản lý tag, tạo, xóa, chỉnh sửa một tag.

Đọc bài viết này để hiểu rõ hơn về:

  • Git tag là gì?
  • Các loại git tag
  • Các thao tác đối với git tag
  • Các làm việc với git tag

Git Tag là gì?

Tag là một đối tượng tham chiếu (references) trỏ đến các điểm cụ thể trong lịch sử Git, tương tự như các đánh dấu chương trong một cuốn sách. Bạn có thể tạo tag để trỏ đến một phiên bản phát hành mới, một thay đổi quan trọng trong mã nguồn, hoặc bất kỳ sự kiện nào mà đội ngũ phát triển muốn tham chiếu đến nhằm chỉ định phiên bản phát hành cụ thể (ví dụ: v1.0.1).

git tag - itviec blog

Tag giống như một nhánh (branch) nhưng không thay đổi. Khác với nhánh, tag không có lịch sử commit sau khi được tạo. Khi một tag được tạo, không thể thêm commit mới vào nó, nhưng bạn có thể dễ dàng tham chiếu bằng tên tag.

Điều này cho phép bạn chuyển sang phiên bản mã nguồn được gắn tag để xem mã trông như thế nào tại thời điểm tag được tạo và nếu cần, có thể quay lại phiên bản mã nguồn cụ thể đó.

Tìm hiểu thông tin chi tiết về Git branch.

Phân loại Git Tag

Có hai loại tag chính trong Git là annotated tag và lightweight tag:

Annotated Tag

Annotated Tag (tag chú thích)  được lưu trữ dưới dạng các đối tượng đầy đủ trong cơ sở dữ liệu Git. Nó bao gồm các metadata bổ sung như người tạo, ngày tạo và mô tả chi tiết. Tương tự như commit, Annotated Tag có một thông điệp gắn thẻ (tagging message) để mô tả chi tiết về nội dung của tag. Annotated Tag được khuyến nghị sử dụng cho việc đánh dấu các điểm quan trọng như phiên bản release (phát hành).

Để tạo một Annotated Tag, ta sử dụng cú pháp sau:

git tag -a <tên tag>

Điều này sẽ thực hiện việc tạo một tag mới, và git sẽ mở một trình soạn thảo để chúng ta có thể bổ sung các nội dung cho tag. Hoặc để bổ sung thêm nội dung mô tả và không cần mở trình soạn thảo, ta có thể sử dụng cú pháp:

git tag -a <tên tag> -m "thông điệp"

Để xem thông tin của một tag, ta có thể sử dụng lệnh git show như sau:

git show <tag name>

Ví dụ về kết quả đầu ra:

tag v1.4
Tagger: User 1<example@itviec.com>
Date:   Sat May 3 20:19:12 2014 -0700

my version 1.4

commit ca82a6dff817ec66f44342007202690a93763949
Author: User 2 <example1@itviec.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    Change version number

Lightweight Tag

Lightweight tag là một tham chiếu trực tiếp đến commit mà không có bất kỳ metadata nào. Điều này phù hợp với các nhãn đơn giản và mang tính tạm thời. Lightweight tag không sử dụng kèm với các tùy chọn -a, -m.

Đây là cú pháp để tạo một lightweight tag:

git tag <tên tag>

So sánh giữa 2 loại tag

Tiêu chí Annotated Tag Lightweight Tag
Cú pháp git tag -a <tên tag> git tag <tên tag>
Metadata Bao gồm người tạo, email, ngày tạo, thông điệp tag Không có metadata
Mục đích sử dụng Phù hợp cho các nhãn quan trọng, ví dụ: phiên bản release Phù hợp cho các nhãn tạm thời hoặc đơn giản
Lưu trữ trong Git Lưu dưới dạng đối tượng đầy đủ trong Git database Chỉ là một tham chiếu trực tiếp
Trường hợp sử dụng cụ thể Tạo tag v1.0.0 để đánh dấu phiên bản phát hành chính thức của ứng dụng, hoặc tag v1.0.1 để đánh dấu phiên bản sửa lỗi cho phiên bản v1.0.0 trước đó, kèm theo mô tả chi tiết như người tạo, thông điệp về tính năng được phát hành Tạo tag v1.0-beta để đánh dấu tạm thời một trạng thái commit cụ thể trong quá trình thử nghiệm

Công dụng của Git tag

Nhờ vào khả năng tạo tham chiếu, Git Tag đã trở thành một công cụ hữu ích với nhiều công dụng quan trọng:

  • Gán nhãn cho các phiên bản quan trọng trong lịch sử commit
  • Quản lý dễ dàng các phiên bản phát hành
  • Hỗ trợ theo dõi và quay lại nhanh chóng một trạng thái cụ thể trong repository

Cách sử dụng Git Tag

Tạo git tag

Cú pháp:

git tag <tên tag>

Hoặc để tạo Annotated Tag:

git tag -a <tên tag>

Ví dụ, bạn đang ở nhánh release và muốn gắn thẻ v1.0.1 cho trạng thái mã nguồn hiện tại, bạn có thể sử dụng cú pháp:

git tag -a v1.0.1 -m "phát hành chức năng đăng nhập"

Kiểm tra danh sách tags

Để liệt kê danh sách các tags đã được tạo trong kho lưu trữ, thực hiện cú pháp sau:

git tag

Lệnh này sẽ đưa ra danh sách các thẻ, ví dụ như:

v1.0.1
v1.0.2
v1.1.0
v1.1.1

Hoặc để lọc ra danh sách tags dựa theo từ khóa, thực hiện cú pháp sau:

git tag -l *<keyword>*

Với tùy chọn -l,  bạn có thể tìm kiếm tên tag dựa tên từ khóa cho trước. Ví dụ để hiển thị tất cả tag có chứa từ khóa ‘-rc’:

git tag -l *-rc*

Kết quả sẽ có dạng sau: 

    v0.10.0-rc1
    v0.11.0-rc1
    v0.12.0-rc1
    v0.13.0-rc1
    v0.13.0-rc2
    v0.14.0-rc1
    v0.9.0-rc1
    v15.0.0-rc.1
    v15.0.0-rc.2
    v15.4.0-rc.3

Gắn tag cho commit cũ

Mặc định, lệnh git tag sẽ tạo một tag trên commit mà HEAD đang tham chiếu. Tuy nhiên, chúng ta có thể truyền một tham chiếu cụ thể cho lệnh git tag để gắn thẻ commit đó thay vì mặc định là HEAD.

Cú pháp cơ bản như sau:

git tag -a <tag name> <commit hash>

Ví dụ, để gắn tag cho commit có thông điệp là “implement feature login”, ta thực hiện như sau:

Bước 1: Sử dụng git log để xem commit hash của commit cần tạo tag

git log --pretty=oneline

#output

cb3w7957951b64cf874c3557a0d83b3gg6 Add page logout

1x62aaab4479697da7686c3d64d91654d0 Implement feature login

ge72a271eda8725415634dd794d9b60vke Merge branch develop

Bước 2: Sử dụng git tag để đánh thẻ cho vị trí commit đó

git tag -a v1.0.0 1x62aaab4479697da7686c3d64d91654d0

Chỉnh sửa/thay thế tag

Trong git, tên tag không được trùng lặp. Vì vậy khi bạn cố gắng tạo một tag với tên trùng với một tag đã tồn tại, Git sẽ báo lỗi ngay lập tức. Trong trường hợp bạn bắt buộc phải cập nhật một tag hiện có, tùy chọn -f (FORCE) phải được sử dụng:

git tag -a -f <tên tag> <commit hash>

Thực thi lệnh trên sẽ ánh xạ commit <commit hash> với tag <tên tag>, Lệnh này sẽ ghi đè bất kỳ nội dung nào hiện có của tag.

Quản lý tag trên remote repository

Việc chia sẻ tag lên kho lưu trữ từ xa tương tự như việc đẩy (push) branch. Mặc định, lệnh git push sẽ không đẩy tag. Tag phải được truyền rõ ràng cho lệnh git push.

Push tag mới lên remote:

git push origin <tên tag>

Hoặc push tất cả tag:

git push origin --tags

Xóa tag

Xóa tag là một thao tác đơn giản, chúng ta chỉ cần sử dụng tùy chọn -d cùng với tên tag trong lệnh git tag:

git tag -d <tên tag>

Ví dụ, để xóa một tag có tên là v1.0.1, ta thực hiện như sau:

git tag -d v1.0.1

Các lưu ý khi sử dụng Git Tag

Đối với các dự án phát hành tính năng thường xuyên, thì việc sử dụng git tag vô cùng quan trọng. Tuy nhiên, để việc sử dụng git tag được hiệu quả và nâng cao chất lượng quản lý phiên bản, cần lưu ý những điều sau:

Lựa chọn loại tag phù hợp với nhu cầu

  • Annotated Tag: Dùng để lưu thêm thông tin như tên tác giả, ngày tạo, và một thông điệp mô tả (message). Thích hợp cho các phiên bản chính thức.
  • Lightweight Tag: Chỉ lưu hash commit, thích hợp cho việc đánh dấu tạm thời.

Kiểm tra chính xác commit trước khi tạo tag, tránh trường hợp tag tham chiếu đến commit khác

  • Đối với trường hợp tạo tag ngay vị trí HEAD đang tham chiếu, bạn có thể sử dụng git log để kiểm tra commit mà HEAD đã trỏ đến:
          git log
  • Đối với trường hợp tạo tag cho một commit được chỉ định, bạn có thể dùng git show để xem thông tin commit
git show <commit-hash>

Tuân thủ quy tắc đặt tên đồng nhất cho các tags trong dự án

Ví dụ:

  • Quy tắc Semantic Versioning: v1.0.1, v1.0.2,…
  • Hoặc dùng thêm tiền tố mô tả như feature-, fix-, release-

Không chỉnh sửa lịch sử khi sử dụng Tag

Một khi tag đã được tạo và sử dụng, không nên sửa đổi commit được gắn tag để tránh xung đột hoặc nhầm lẫn.

Đọc thêm: Top 10+ kỹ thuật Git nâng cao

Các câu hỏi thường gặp về Git Tag

Có cách nào để tìm commit mà Git Tag đang tham chiếu không?

Để tìm commit mà một Git Tag đang tham chiếu, bạn có thể sử dụng các lệnh dưới đây:

Hiển thị đầy đủ thông tin commit

git show <tag_name>

Lệnh này sẽ hiển thị tất cả thông tin của tag bao gồm tên, ngày tạo, các metadata (nếu có) và thông tin commit đang tham chiếu, ví dụ:

tag v1.0.0

Tagger: Nguyen Van A <example@itviec.com>

Date: Fri Dec 22 10:42:19 2024 +0700

Release version 1.0.0

commit e4f2b12345f4rg90abcdef5xw24567890addef1 (HEAD -> main, tag: v1.0.0)

Author: Nguyen Van A <example@itviec.com>

Date: Fri Jan 3 09:30:12 2025 +0700

      Add unit tests for user service

Hiển thị thông tin commit dưới dạng ngắn gọn

Trường hợp chỉ muốn hiển thị thông tin commit, bạn có thể sử dụng git log với tùy chọn -l:

git log -1 <tên tag>

Ví dụ về output:

commit e4f2b12345f4rg90abcdef5xw24567890addef1 (tag: v1.0.1) Author: Nguyen Van A <example@itviec.com>

Date: Fri Dec 22 10:42:19 2024 +0700

     Add unit tests for user service

Chỉ cần hiển thị commit hash

Nếu chỉ cần hash của commit mà tag tham chiếu, sử dụng lệnh:

git rev-parse <tag_name>

Git Tag có khác gì với Git Branch không?

Git Tag và Git Branch đều được sử dụng để đánh dấu các điểm cụ thể trong lịch sử của repository, nhưng chúng phục vụ các mục đích khác nhau và hoạt động không giống nhau.

Dưới đây là sự khác biệt chi tiết:

Tiêu chí Git Tag Git Branch
Cú pháp tạo git tag <tùy chọn> <tên tag> git branch <tên branch>
Cách hoạt động Sử dụng để đánh dấu một commit cố định, thường là các phiên bản phát hành Là “con trỏ di động” trỏ đến các commit mới, tách luồng làm việc khỏi nhánh chính
Tính cố định Không thay đổi theo thời gian, tag luôn tham chiếu đến cùng một commit Branch thay đổi khi có commit mới được thêm vào
Mục đích sử dụng Phù hợp để lưu trữ trạng thái quan trọng của code, tạo các phiên bản phát hành Được sử dụng để phát triển tính năng, sửa lỗi, hoặc thực hiện công việc trên các nhánh riêng biệt
Trường hợp sử dụng cụ thể Tạo tag cho phiên bản phát hành v1.0.0 để xác định rõ ràng phiên bản ổn định của ứng dụng Tạo branch feature/users để phát triển tính năng quản lý danh sách người dùng

Làm sao để sửa hoặc đổi tên một Git Tag?

Git không hỗ trợ đổi tên trực tiếp, vì vậy để sửa hoặc đổi tên một Git Tag, bạn cần thực hiện các bước xóa tag cũ và tạo tag mới. Dưới đây là hướng dẫn chi tiết:

Bước 1: Kiểm tra thông tin commit đang được tag tham chiếu và các thông tin metadata của tag (nếu có)

git show <tên tag>

Bước 2: Thực hiện lệnh xóa tag cũ

git tag -d <tên tag>

Bước 3: Tạo tag mới tham chiếu đến commit đã kiểm tra ở bước 1

git tag <tên tag mới> <commit hash>

Ví dụ, để xóa tag v0.1.0, ta thực hiện:

Bước 1: Xem thông tin commit và loại tag

git show v0.1.0

Bước 2: Xóa tag v0.1.0

git tag -d v0.1.0

Bước 3: Tạo lại tag với thông tin commit và metadata cũ

git tag -a v0.0.1 e4f2b12345f4rg90abcdef5xw24567890addef1

Tổng kết

Git Tag là một công cụ tuyệt vời giúp quản lý phiên bản phát hành hoặc đánh dấu các điểm quan trọng trong dự án. Việc sử dụng git tag đúng cách sẽ giúp nhóm làm việc hiệu quả và khoa học hơn.