Khi làm việc với Git, các nhà phát triển thường tạo các tag như là những điểm tham chiếu trong quá trình phát triển phần mềm của họ, đặc biệt là cho các phiên bản phát hành.
Các tag của Git là các đối tượng Git có thể được checkout tương tự như một nhánh hoặc một commit.
Trong hướng dẫn này, chúng ta sẽ cùng nhau tìm hiểu cách checkout Git tags thông qua các ví dụ được trình bày rõ ràng và dễ hiểu nhất.
Điều đầu tiên bạn cần đảm bảo là đã lấy được danh sách các tag mới nhất từ kho lưu trữ từ xa (remote repository).
Để lấy các tag từ kho lưu trữ từ xa của bạn, thực thi lệnh git fetch
cùng với cả hai tùy chọn --all
và --tags
.
Điều này sẽ đảm bảo rằng kho lưu trữ cục bộ (local repository) của bạn được cập nhật với các tag mới nhất từ kho lưu trữ từ xa, cho phép bạn truy cập vào các phiên bản mã nguồn cụ thể và xác định các bản phát hành mới nhất từ dự án của bạn.
$ git fetch --all --tags
Lệnh này sẽ trả về đầu ra như dưới đây:
# Output
From <remote url>
* [new tag] v1.0.0 -> v1.0.0
Để xem danh sách đầy đủ các thẻ trong kho lưu trữ từ xa, chúng ta sử dụng lệnh git tag
.
$ git tag
Kết quả đầu ra của lệnh này sẽ là:
# Output
v1.0.0
v1.0.1
Tương tự, chúng ta có thể xem danh sách các nhánh hiện có trên kho lưu trữ từ xa bằng cách thực thi lệnh sau đây.
$ git branch -r
Bạn sẽ thấy kết quả đầu ra như sau:
# Output
origin/HEAD -> origin/main
origin/dev
origin/main
-r
để hiển thị các nhánh theo dõi từ xa trong danh sách.Bước này thực hiện việc checkout của một thẻ cụ thể sang một nhánh mới không có trong danh sách các nhánh hiện tại được lấy ở Bước 2.
Bạn có thể sử dụng lệnh git checkout
để checkout một thẻ Git bằng cách chỉ định tên thẻ cùng với tên nhánh.
$ git checkout <tag_name> -b <branch>
Ví dụ, nếu bạn muốn checkout thẻ v1.0.0
sang một nhánh mới có tên là v1.0.0-branch
, hãy chạy lệnh sau.
$ git checkout v1.0.0 -b v1.0.0-branch
Đây là kết quả đầu ra sau khi chạy lệnh trên:
# Output
Switched to a new branch 'v1.0.0-branch'
fatal: a branch named 'main' already exists
.Bằng cách chạy lệnh trên, bạn đã thành công trong việc checkout tag v1.0.0.
Khi bạn chạy lệnh git checkout <tag_name>
mà không sử dụng tùy chọn -b
, Git sẽ chuyển kho lưu trữ cục bộ của bạn sang trạng thái gọi là “Detached HEAD”.
Trong trạng thái này, bạn đang làm việc trực tiếp với một commit cụ thể thay vì một nhánh. Điều này có thể gây nhầm lẫn và gây khó khăn trong việc quản lý mã nguồn của bạn, vì vậy bạn nên sử dụng tùy chọn -b
để tạo một nhánh mới từ tag.
Để kiểm tra trạng thái của nhánh của bạn, sử dụng lệnh git log
và đảm bảo rằng con trỏ HEAD, đại diện cho commit mới nhất, đang trỏ đến tag quan tâm của bạn.
$ git log --oneline --graph
Kết quả đầu ra của lệnh này sẽ là:
# Output
* 5848c3c (HEAD -> v1.0.0-branch, tag: v1.0.0, main, dev) first commit
Bây giờ bạn có thể bắt đầu làm việc trên nhánh của mình, sử dụng tag mà bạn đã chỉ định trước đó làm điểm khởi đầu.
Nếu bạn cần checkout tag mới nhất, hãy tham khảo phần sau đây.
Để checkout tag Git mới nhất, bạn cần cập nhật kho lưu trữ của mình bằng cách tìm bất kỳ tag từ xa nào hiện có. Vui lòng chạy lệnh sau.
$ git fetch --tags
# Output
From <remote url>
* [new tag] v1.0.0 -> v1.0.0
* [new tag] v1.0.2 -> v1.0.2
Chúng ta sẽ gán một biến có tên là latest-tag
với giá trị được trả về bởi lệnh git describe
, đó là tên của tag mới nhất trên kho lưu trữ từ xa của bạn.
Hãy chạy lệnh sau:
$ latest_tag=$(git describe --tags `git rev-list --tags --max-count=1`)
Sau đó, chạy lệnh sau để xem giá trị của biến $latest_tag
:
$ echo $latest_tag
# Output
v1.0.2
$ git checkout $latest_tag -b latest
# Output
Switched to a new branch 'latest'
Đó là tất cả, bạn đã checkout thành công tag mới nhất.
Chạy lệnh sau để đảm bảo rằng bạn đang làm việc trên tag mới nhất của mình.
$ git log --oneline --graph
Trong hướng dẫn này, bạn đã học cách để có thể dễ dàng checkout các tag trên Git bằng cách sử dụng lệnh git checkout
.
Ngoài ra, bạn đã có thêm kiến thức về cách checkout các tag Git mới nhất từ kho lưu trữ của mình, đặc biệt là khi xử lý nhiều tag.
Bằng cách làm theo các bước được đề cập trong hướng dẫn này, bạn hiện có thể quản lý kho lưu trữ Git của mình một cách hiệu quả và làm việc với các tag một cách hiệu quả hơn.