Cách tạo và quản lý Git tag
Tạo và quản lý Git tag khá đơn giản. Hãy cùng phân loại các kiểu tag và cách áp dụng chúng.
- Để dùng Git tag, bạn cần cài sẵn Git trên máy. Bạn có thể đọc thêm về cài đặt Git trong Hướng dẫn cài đặt Git.
- Một điều kiện khác là có sẵn một kho Git đã khởi tạo. Bạn có thể đọc thêm tại Cách khởi tạo và thiết lập kho Git.
Tạo tag nhẹ
Tag nhẹ giống như một con trỏ tới một commit. Nó không bao gồm metadata, chỉ có tên tag và commit mà nó trỏ tới.
Để tạo, bạn có thể chạy:
git tag v1.0.0
Lệnh này tạo một tag nhẹ trỏ tới commit HEAD hiện tại.
Bạn cũng có thể tạo tag cho một commit cụ thể bằng cách cung cấp hash của commit:
git tag v1.0.0 5c5fc06
Tag nhẹ hữu ích cho các tham chiếu nhanh, cục bộ, đặc biệt trong dự án làm việc một mình hoặc công việc tạm thời.
Tạo tag chú giải
Annotated tag lưu nhiều thông tin hơn, như tên người gắn tag, email, ngày tháng và thông điệp. Chúng được lưu như đối tượng Git đầy đủ và rất phù hợp để gắn thẻ các bản phát hành chính thức hoặc cột mốc.
Bạn có thể tạo bằng cách chạy:
git tag -a v1.0.0 -m "Release version 1.0.0"
Lệnh này tạo một annotated tag tên v1.0.0 với thông điệp "Release version 1.0.0".
Bạn cũng có thể gắn thẻ cho một commit cụ thể:
git tag -a v1.0.0 5c5fc06 -m "Tagging older commit"
Annotated tag cung cấp tài liệu tốt hơn, tích hợp mượt với công cụ CI/CD, và giúp nhóm theo dõi lịch sử minh bạch hơn.
Gắn thẻ cho commit cụ thể
Đôi khi bạn cần gắn tag cho một commit không phải mới nhất. Khi đó, bạn có thể trước tiên lấy lịch sử commit rồi chọn hash commit muốn gắn thẻ.
Để lấy hash commit, bạn có thể chạy:
git log --oneline
Sao chép hash commit từ danh sách, sau đó:
git tag -a v1.0.0 <commit-hash> -m "Tagging v1.0.0 release"
Xác minh các tag đã tạo
Để liệt kê tất cả tag trong kho của bạn, dùng:
git tag
Nếu bạn muốn lọc tag, ví dụ chỉ các phiên bản bắt đầu bằng v1., hãy dùng:
git tag -l 'v1.*'
Để xem chi tiết về một tag cụ thể, chạy:
git show v1.0.0
Làm việc với Git tag
Sau khi tạo Git tag, bạn thường cần chia sẻ, cập nhật hoặc tương tác với chúng như một phần của quy trình phát triển hay phát hành. Phần này đề cập các tác vụ phổ biến nhất khi làm việc với tag trong kho cục bộ và từ xa.
Đẩy tag lên kho từ xa
Tag không tự động được đẩy lên kho từ xa khi bạn chạy git push. Bạn phải đẩy chúng một cách tường minh.
Để đẩy một tag đơn lẻ:
git push origin v1.0.0
Để đẩy tất cả tag cùng lúc:
git push --tags
Tag cần được đẩy để đồng đội của bạn hoặc pipeline CI/CD có thể tiếp cận chúng. Tag cũng thường được dùng làm trình kích hoạt triển khai, đặc biệt theo các luồng phát hành có phiên bản. Bạn có thể đọc thêm về cách push và pull nhánh trong Hướng dẫn Git Push và Pull.
Xóa tag
Nếu bạn muốn xóa một tag, bạn có thể thực hiện cả cục bộ và từ xa.
Để xóa cục bộ, chạy:
git tag -d v1.0.0
Sau đó xóa cùng tag đó khỏi kho từ xa:
git push origin --delete v1.0.0
Bạn cũng có thể xóa trực tiếp tag từ giao diện web của GitHub hoặc GitLab.
>Nếu bạn muốn tìm hiểu thêm về GitHub và cách sử dụng, tôi khuyên bạn các khóa GitHub Foundations và GitHub Concepts.
Checkout tag
Bạn có thể đưa kho của mình về trạng thái của một tag cụ thể bằng cách chạy:
git checkout v1.0.0
Tuy nhiên, điều này sẽ đưa bạn vào trạng thái detached HEAD. Nghĩa là bạn không còn ở trên một nhánh, và bất kỳ commit mới nào sẽ không thuộc về nhánh nào trừ khi bạn tạo nhánh rõ ràng:
git checkout -b hotfix-v1.0.0
Checkout một tag cụ thể giúp debug hoặc rà soát một phiên bản phát hành mà không ảnh hưởng nhánh phát triển hiện tại. Nó cũng được dùng để build ứng dụng production từ một phiên bản cụ thể, ví dụ khi cần build image Docker.
Gắn thẻ sau khi commit
Nếu bạn cần cập nhật một tag, ví dụ chuyển nó sang commit khác hoặc đổi thông điệp, bạn có thể cưỡng bức cập nhật bằng cách chạy:
git tag -f -a v1.0.0 5c5fc06 -m "retagging"
Bạn cũng có thể chạy tương tự mà không có hash commit để chỉ cần thêm tag vào HEAD hiện tại.
>Nếu bạn cần xem nhanh các lệnh Git truyền thống, tôi khuyên bạn dùng Git Cheat Sheet đầy đủ.
Thực hành tốt khi dùng Git tag
Biết cách tạo và quản lý tag là một chuyện, dùng chúng hiệu quả lại là chuyện khác. Khi dùng hợp lý, tag có thể tăng tốc quy trình, tài liệu, và giao tiếp trong nhóm.
Dùng tag cho quản lý phiên bản
Tag rất phù hợp cho semantic versioning, đó là cách khuyến nghị để đánh phiên bản cho các bản phát hành.
Trong semantic versioning, số phiên bản có dạng MAJOR.MINOR.PATCH, ví dụ v.1.2.0.
MAJOR dành cho thay đổi lớn và phá vỡ tương thích, MINOR dành cho tính năng mới, còn PATCH dành cho sửa lỗi.
Semantic versioning rất mạnh. Nó truyền đạt rõ phạm vi thay đổi, giúp nhà phát triển hiểu khả năng tương thích, và hoạt động tốt với công cụ tự động như trigger CI/CD.
Hãy bám theo một quy ước đặt tên nhất quán. Chọn một mẫu (ví dụ, luôn thêm tiền tố v) và áp dụng cho mọi bản phát hành.
Gắn thẻ cho bản phát hành
Tag lý tưởng để đánh dấu các giai đoạn phát hành then chốt của dự án. Dưới đây là vài kiểu tag hữu ích bạn có thể cân nhắc:
v1.0.0-alpha: Phiên bản thử nghiệm nội bộv1.0.0-beta: Bản beta công khaiv1.0.0: Bản phát hành production cuối cùng
Bằng cách gắn thẻ các giai đoạn này, bạn có thể dễ dàng chia sẻ bản build thử nghiệm, quay lại bản phát hành trước, và giữ lịch sử triển khai production gọn gàng.
Bạn có thể cải thiện thêm bằng cách dùng annotated tag cho các bản phát hành để lưu lại ngữ cảnh và tài liệu phù hợp.
Tránh lạm dụng tag
Dù tiện lợi và mạnh mẽ, tag có thể trở nên vô dụng nếu bị lạm dụng. Tag chỉ nên đánh dấu những điểm có ý nghĩa trong lịch sử dự án, như phiên bản ổn định, hoàn tất tính năng lớn, cột mốc, hoặc hạn chót.
Gắn thẻ mọi commit sẽ làm rối kho và phá hỏng mục tiêu điều hướng nhanh. Hãy giữ cho gọn và có mục đích!
Một nguyên tắc hay là: nếu bạn sẽ không triển khai hoặc công bố nó, có lẽ nó không cần tag.
Khắc phục sự cố với Git tag
Ngay cả khi tuân thủ thực hành tốt, đôi lúc bạn vẫn gặp vấn đề khi làm việc với Git tag, nhất là khi làm việc nhóm hoặc đồng bộ với kho từ xa. Phần này hướng dẫn cách xử lý các vấn đề phổ biến nhất.
Xử lý trạng thái detached HEAD
Khi bạn checkout một tag cụ thể bằng:
git checkout v1.0.0
Git đưa bạn vào trạng thái HEAD tách rời như đã đề cập. Nghĩa là bạn không ở trên nhánh nào, nên nếu bạn commit, nó sẽ không thuộc về nhánh nào và có thể bị mất trừ khi bạn xử lý.
Bạn có thể khắc phục bằng cách tạo một nhánh, chạy:
git checkout -b hotfix-v1.0.0
Giờ bạn đang làm việc trên một nhánh và có thể commit, push như bình thường.
Giải quyết xung đột tag
Xung đột có thể xảy ra khi cùng một tên tag trỏ tới các commit khác nhau ở cục bộ và từ xa.
Điều này thường xảy ra khi bạn xóa và tạo lại tag ở cục bộ, hoặc ai đó force-push một tag.
Có hai cách để giải quyết vấn đề đó.
Cách 1: Xóa và đẩy lại tag
git tag -d v1.0.0
git push origin --delete v1.0.0
git tag -a v1.0.0 -m "Corrected tag"
git push origin v1.0.0
Cách 2: Force-push tag đã cập nhật
Nếu bạn chắc chắn tag cục bộ của mình là đúng và bạn có quyền:
git push origin -f v1.0.0
Nhưng hãy cẩn trọng với lựa chọn đó vì force-push có thể ghi đè thay đổi của người khác. Chỉ dùng khi bạn chắc chắn hoặc sau khi đã trao đổi với nhóm.
Kết luận
Git tag là công cụ rất mạnh khi dùng đúng cách. Trong hướng dẫn này, bạn đã học:
- Git tag là gì và khi nào nên dùng
- Cách áp dụng Git tag trong kho của bạn
- Thực hành tốt khi dùng Git tag
- Cách khắc phục các vấn đề thường gặp khi làm việc với Git tag
Dù bạn phát hành mô hình machine learning, cập nhật sản phẩm dữ liệu, hay cộng tác trong nhóm, tag giúp bạn đánh dấu những khoảnh khắc ý nghĩa trong dòng thời gian dự án. Chúng giữ mọi thứ có tổ chức, có thể tái lập, và dễ quay lui hoặc triển khai.
Tôi dựa vào Git tag mọi lúc. Chúng giúp tôi tiết kiệm hàng giờ bằng cách cho phép quay về phiên bản ổn định khi lỗi xuất hiện hoặc kích hoạt quy trình CI/CD tự động. Tôi dùng chúng để gắn thẻ và đánh phiên bản cho Docker image phục vụ build production, đảm bảo mọi thứ tôi phát hành đều có thể truy vết và được ghi nhận đầy đủ.
Hãy bắt đầu dùng tag ngay hôm nay và biến đổi quy trình Git của bạn!
FAQs
Git tag dùng để làm gì?
Git tag đánh dấu các điểm cụ thể trong lịch sử kho, thường dùng cho bản phát hành hoặc cột mốc quan trọng.
Sự khác nhau giữa Git tag nhẹ và annotated tag là gì?
Tag nhẹ là tham chiếu đơn giản tới một commit, trong khi annotated tag lưu metadata như tác giả, ngày tháng và thông điệp.
Điều gì xảy ra khi tôi checkout một tag trong Git?
Bạn sẽ vào trạng thái “detached HEAD”, nghĩa là bạn không ở trên một nhánh, và mọi commit sẽ không được lưu vào nhánh nào trừ khi bạn tạo một nhánh.
Làm thế nào để tạo một Git tag?
Dùng git tag <tagname> cho tag nhẹ hoặc git tag -a <tagname> -m "message" cho annotated tag.
Git tag có thường dùng trong quy trình CI/CD không?
Có. Tag có thể kích hoạt build hoặc triển khai tự động trong pipeline CI/CD, đặc biệt khi gắn thẻ phiên bản phát hành.

Tôi là Kỹ sư Cloud với nền tảng vững chắc về Kỹ thuật Điện, học máy và lập trình. Sự nghiệp của tôi bắt đầu từ lĩnh vực thị giác máy tính, tập trung vào phân loại ảnh, trước khi chuyển sang MLOps và DataOps. Tôi chuyên xây dựng nền tảng MLOps, hỗ trợ các nhà khoa học dữ liệu và triển khai các giải pháp dựa trên Kubernetes để tinh gọn quy trình làm việc của học máy.
Tôi là kỹ sư machine learning. Nếu có một điều quan trọng tôi học được thì đó là: quản lý phiên bản sạch sẽ không chỉ là thực hành tốt mà còn tối quan trọng cho khả năng tái lập và cộng tác.
Git tag rất cần thiết để đánh dấu những trạng thái ổn định trong mã nguồn. Chúng giúp tạo bản phát hành, quay lại phiên bản trước, hoặc tích hợp với quy trình CI/CD. Dù bạn làm việc với mã, dữ liệu hay mô hình machine learning mới, Git tag đều giúp bạn nhẹ gánh hơn, bất kể nền tảng hay vai trò của bạn.
Trong hướng dẫn này, tôi sẽ giải thích mọi thứ bạn cần biết để áp dụng và làm chủ Git tag. Sẵn sàng xem Git tag có thể đơn giản hóa công việc phát triển của bạn thế nào chưa? Hãy bắt đầu.
>Nếu trước hết bạn muốn xem nhanh tổng quan về Git, tôi khuyên bạn nên đọc Hướng dẫn GitHub và Git cho người mới bắt đầu.
Git tag là gì?
Git tag là một cách đơn giản nhưng mạnh mẽ để đánh dấu những điểm cụ thể trong lịch sử dự án. Hãy coi nó như dán một tờ giấy nhớ lên một commit nào đó và nói: “Cái này quan trọng.”
Git tag thường dùng để gắn nhãn phiên bản phát hành, cột mốc, hoặc các điểm kiểm tra ổn định trong codebase. Chúng là tham chiếu cố định tới một commit cụ thể nhưng không tạo commit mới. Khi bạn gắn tag cho một commit, nhãn đó sẽ neo vào commit đó trừ khi bạn tự tay di chuyển hoặc xóa tag.
Nhánh master với hai Git tag. Ảnh của tác giả.
Có hai loại tag chính:
>Để học thêm về Git, tôi khuyên bạn xem các khóa Foundations of Git hoặc Intermediate Git.