Giao diện
2. Stash (Kho tạm)
NOTE
SCENARIO: Bạn đang viết dở tính năng Login (code nát bét, chưa chạy được) trên branch feat/login. Sếp chạy vào hét: "Web sập rồi! Sửa ngay!". Bạn không thể commit code dở dang được (vi phạm HPN's Rule #2). Bạn cũng không muốn xóa code đi viết lại.
2.1 Cất đi để làm việc khác (git stash)
Stash giống như ngăn kéo bàn làm việc. Bạn quét sạch đống lộn xộn trên bàn ném vào ngăn kéo để mặt bàn sạch sẽ.
bash
git stash
# Hoặc đặt tên cho dễ nhớ:
git stash save "dang lam do login"Lúc này git status sẽ báo "Clean". Bạn có thể an tâm switch sang branch hotfix để sửa lỗi.
2.2 Lấy lại code cũ (git stash pop)
Sau khi fix bug xong, quay lại branch cũ và mở ngăn kéo ra.
bash
git stash popLệnh này sẽ lấy code từ Stash đắp lại vào Working Directory và xóa luôn bản backup trong Stash.
2.3 Quản lý Stash
Nếu bạn là người bừa bộn (stash quá nhiều lần), hãy kiểm tra danh sách:
bash
git stash list
# stash@{0}: On feature/login: dang lam do login
# stash@{1}: On master: fix headerApply một stash cụ thể (không xóa khỏi list):
bash
git stash apply stash@{0}TIP
Đừng lạm dụng Stash thay cho Commit. Stash là bộ nhớ tạm (Temporary Buffer), không phải nơi lưu trữ lâu dài.
🧠 Quiz
Câu 1: git stash lưu tạm những thay đổi nào?
- [ ] A) Chỉ file đã staged
- [ ] B) Chỉ file chưa staged
- [x] C) Cả file đã staged lẫn chưa staged (tracked files)
- [ ] D) Tất cả file kể cả untracked
💡 Giải thích: Mặc định
git stashlưu tạm cả staged và unstaged changes của tracked files. Để bao gồm untracked files, dùnggit stash -u. File trong.gitignorecần flag-a.
Câu 2: Sự khác biệt giữa git stash pop và git stash apply là gì?
- [ ] A)
popáp dụng stash cũ nhất,applyáp dụng stash mới nhất - [x] B)
popáp dụng và xóa stash khỏi list,applyáp dụng nhưng giữ stash trong list - [ ] C)
popchỉ hoạt động với stash@{0},applyhoạt động với mọi stash - [ ] D) Không có sự khác biệt
💡 Giải thích:
git stash pop= apply + drop (áp dụng stash rồi xóa khỏi danh sách).git stash applychỉ áp dụng mà giữ nguyên stash trong list, hữu ích khi muốn apply cùng stash vào nhiều branch.
Câu 3: Tại sao không nên lạm dụng Stash thay cho Commit?
- [ ] A) Vì stash có giới hạn 10 entries
- [ ] B) Vì stash không thể lưu binary files
- [x] C) Vì stash là bộ nhớ tạm, không có message rõ ràng và dễ mất theo thời gian
- [ ] D) Vì stash tốn nhiều disk space hơn commit
💡 Giải thích: Stash là temporary buffer, không phải version control. Stash entries thiếu context (message), dễ quên mục đích ban đầu, và có thể bị mất khi garbage collection. Commit mới là cách lưu trữ lâu dài đúng đắn.