Cất tạm với git stash và đánh dấu với git tag
Stashing Changes and Tagging Releases
Hai công cụ hữu ích cho công việc hằng ngày: git stash giúp bạn cất tạm thay đổi dang dở để làm việc khác, còn git tag giúp đánh dấu một commit là một phiên bản phát hành. Bài này gộp cả hai.
git stash: cất tạm thay đổi
Đang sửa dở thì cần chuyển nhánh gấp để vá lỗi, nhưng chưa muốn commit code chưa xong? git stash cất mọi thay đổi chưa commit vào một ngăn riêng và trả working directory về sạch:
# Cất tạm mọi thay đổi chưa commit
git stash
# Cất kèm ghi chú để dễ nhận ra
git stash push -m "đang làm form login"
Sau khi stash, git status sẽ sạch — bạn tự do chuyển nhánh, pull, v.v.
Lấy lại và quản lý stash
# Xem danh sách các stash đã cất
git stash list
# Áp lại stash mới nhất VÀ xóa nó khỏi danh sách
git stash pop
# Áp lại nhưng GIỮ trong danh sách
git stash apply
# Xóa stash mới nhất
git stash drop
| Lệnh | Tác dụng |
|---|---|
git stash | Cất thay đổi, làm sạch working dir |
git stash list | Liệt kê các stash (stash@{0}, {1}…) |
git stash pop | Áp lại và xóa khỏi danh sách |
git stash apply | Áp lại nhưng giữ trong danh sách |
Mẹo
stash là một ngăn xếp stack: stash mới nhất là stash@{0}. Bạn có thể cất nhiều lần và áp lại đúng cái cần: git stash pop stash@{2}.
git tag: đánh dấu phiên bản
Tag là một cái tên cố định gắn vào một commit cụ thể, thường để đánh dấu một bản phát hành (release) như v1.0.0. Khác với nhánh, tag không di chuyển khi có commit mới.
Có hai loại tag:
Lightweight tag
Chỉ là một con trỏ trỏ tới commit, không kèm thông tin gì thêm:
# Tạo lightweight tag
git tag v1.0.0
Annotated tag
Là một đối tượng đầy đủ trong Git: chứa người tạo, ngày giờ, message — và có thể ký số. Đây là loại được khuyến nghị cho release:
# Tạo annotated tag với message
git tag -a v1.0.0 -m "Phát hành bản 1.0.0"
| Loại | Lưu thông tin tác giả/ngày/message | Dùng cho |
|---|---|---|
| Lightweight | Không | Đánh dấu tạm, riêng |
| Annotated | Có | Release chính thức |
Push tag lên remote
Lưu ý quan trọng: git push thường không tự đẩy tag. Phải đẩy riêng:
# Đẩy một tag cụ thể
git push origin v1.0.0
# Đẩy tất cả tag chưa có trên remote
git push origin --tags
Trọng tâm thi
Phân biệt lightweight tag (chỉ con trỏ) và annotated tag (-a, có tác giả/ngày/message — nên dùng cho release). git push không tự đẩy tag; cần git push origin <tag> hoặc --tags.
Tóm tắt
git stashcất tạm thay đổi chưa commit, trả working directory về sạch;popáp lại và xóa,applyáp lại và giữ.git stash listxem các stash; stash hoạt động như một ngăn xếpstash@{n}.git tagđánh dấu commit là một phiên bản; tag không di chuyển theo commit mới.- Lightweight tag chỉ là con trỏ; annotated tag (
-a) có tác giả/ngày/message, nên dùng cho release. - Tag không tự được push: dùng
git push origin <tag>hoặcgit push origin --tags.