
Khi lập trình với Git, bạn đôi khi cần chuyển sang nhánh khác ngay giữa chừng nhưng chưa muốn commit công việc đang làm. git stash là giải pháp lưu thay đổi tạm thời, giúp working directory sạch sẽ để checkout nhanh mà không mất code.
Git stash hoạt động thế nào?
git stash lưu tất cả thay đổi trong working directory và staged area vào một danh sách ẩn gọi là stash stack. Sau khi stash, working directory trở về trạng thái lần commit cuối, giống như bạn chưa từng chỉnh sửa file nào. Bạn có thể lấy lại thay đổi bất kỳ lúc nào bằng git stash pop hoặc git stash apply.
Cách dùng git stash cơ bản
Lệnh cơ bản nhất để lưu công việc tạm:
git stash
Hoặc lưu kèm mô tả để sau này dễ nhận biết:
git stash save "WIP: tính năng đăng nhập OAuth"
Kiểm tra danh sách stash đang có:
git stash list
Kết quả hiển thị dạng stash@{0}: On main: WIP: tính năng đăng nhập OAuth.
Lấy lại thay đổi: pop vs apply
Hai lệnh để restore stash khác nhau ở chỗ giữ lại bản ghi stash hay không.
| Lệnh | Hành vi | Dùng khi |
|---|---|---|
git stash pop |
Apply stash và xóa khỏi stack | Đã dùng xong, không cần stash nữa |
git stash apply |
Apply stash nhưng giữ lại trong stack | Cần dùng lại stash nhiều lần |
Nếu bạn có nhiều stash, chỉ định stash cụ thể:
git stash pop stash@{1}

Stash có include files chưa track?
Mặc định git stash chỉ lưu file đã được theo dõi (tracked). File mới chưa git add sẽ không được stash. Để bao gồm cả file chưa track:
git stash -u
Hoặc bao gồm cả file bị .gitignore bỏ qua:
git stash -a
Xóa stash không cần thiết
Xóa stash cụ thể:
git stash drop stash@{0}
Xóa toàn bộ stash stack:
git stash clear

Khi nào nên dùng git stash?
- Nhận
pull requestkhẩn cấp, cần checkout sang nhánh hotfix - Thử nghiệm đoạn code mới rồi muốn quay lại trạng thái sạch để đánh giá
- Chuyển sang nhánh feature khác mà chưa muốn commit công việc hiện tại
Đừng lạm dụng git stash thay cho commit nhỏ. Nếu thay đổi có giá trị, hãy commit lên nhánh riêng. git stash là công cụ tạm thời, không phải công cụ quản lý code dài hạn.
Git stash và branch: workflow thực tế
Quy trình điển hình khi bạn đang code feature A (nhánh feature-A) nhưng cần sửa bug khẩn cấp trên main:
git stash save "WIP: feature A - half done"git checkout maingit checkout -b hotfix/login-bug- Sửa bug, commit:
git commit -am "Fix login validation" git checkout main && git merge hotfix/login-buggit checkout feature-Agit stash pop– tiếp tục code feature A
Workflow này giúp bạn không bao giờ mất code dở dang, đồng thời giữ lịch sử commit sạch.
Xử lý conflict khi stash pop
Nếu code trên nhánh hiện tại thay đổi cùng file với stash, git stash pop có thể báo conflict. Git sẽ đánh dấu conflict trong file (<<<<<<>>>>>>). Bạn giải quyết thủ công, rồi git add và commit. Hoặc dùng git stash apply để giữ stash, giải quyết conflict, rồi git stash drop khi xong.
Các tùy chọn nâng cao của git stash
Ngoài các lệnh cơ bản, git stash còn hỗ trợ:
git stash push -m "message": Tương đươnggit stash savenhưng cú pháp mới hơn.git stash branch: Tạo nhánh mới từ stash và xóa stash – hữu ích khi stash quá cũ so với HEAD.git stash show -p: Hiển thị diff đầy đủ của stash thay vì chỉ tóm tắt.git stash show stash@{1} --stat: Xem thống kê thay đổi của stash cụ thể.
Lệnh git stash branch đặc biệt hữu ích khi bạn stash code rồi quên lâu ngày, base commit đã thay đổi nhiều. Nó tự động tạo nhánh mới tại commit gốc của stash, apply stash, và xóa stash – giúp bạn tiếp tục làm việc ngay mà không lo conflict.
Stash vs Commit: khi nào dùng cái nào?
Quy tắc đơn giản: nếu thay đổi hoàn thành một đơn vị logic (tính năng, sửa bug, refactor) → git commit. Nếu thay đổi chưa xong, mang tính thử nghiệm, hoặc cần chuyển nhánh gấp → git stash. Commit tạo lịch sử vĩnh viễn, stash tạo bộ nhớ tạm. Lạm dụng stash làm rối stash stack, lạm dụng commit tạo lịch sử rác – cân bằng là chìa khóa.
Kết luận
git stash giúp bạn di chuyển giữa các nhánh Git nhanh chóng mà không cần commit dở. Dùng git stash save kèm mô tả, git stash pop để lấy lại, và git stash drop để dọn stack định kỳ. Kết hợp với git commit thường xuyên để code luôn an toàn.
Xem thêm: Tài liệu chính thức git stash và Hướng dẫn Atlassian về stash.
