Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Sau khi nắm add, commit, push, bạn sẽ sớm gặp những tình huống như đang làm dở thì phải sửa gấp lỗi khác, hoặc lỡ commit sai. Ba lệnh stash, cherry-pick và reset giải quyết đúng các tình huống này. Hiểu rõ khi nào dùng lệnh nào sẽ giúp bạn tự tin thao tác mà không sợ mất code.
Bạn đang sửa dở một tính năng thì sếp báo có lỗi cần fix ngay trên nhánh khác. Bạn chưa muốn commit code dở dang. Hãy dùng stash:
git stash push -m "dang lam form dang ky"git switch main# ... sửa lỗi gấp, commit ...git switch feature/signupgit stash popMột số lệnh stash hữu ích:
git stash list: xem danh sách các stash đã cất.git stash pop: lấy stash gần nhất ra và xóa khỏi danh sách.git stash apply: lấy ra nhưng vẫn giữ lại trong danh sách.git stash push -u: cất cả file mới chưa được theo dõi (untracked).git stash drop: xóa một stash không cần nữa.Hãy luôn đặt thông điệp cho stash bằng -m, nếu không sau vài ngày bạn sẽ không nhớ stash nào chứa gì. Và đừng dùng stash như nơi lưu trữ lâu dài, nếu việc còn dở lâu thì commit lên một nhánh riêng sẽ an toàn hơn.
Đôi khi bạn chỉ muốn lấy một commit cụ thể từ nhánh khác, chẳng hạn bản sửa lỗi bảo mật cần đưa gấp sang nhánh phát hành mà không kéo theo các tính năng khác.
git switch release/1.2git cherry-pick a1b2c3dGit sẽ tạo một commit mới có cùng nội dung thay đổi (khác mã hash) trên nhánh hiện tại. Nếu có xung đột, bạn xử lý rồi chạy git cherry-pick --continue, hoặc hủy bằng git cherry-pick --abort.
Lưu ý: dùng cherry-pick quá nhiều khiến cùng một thay đổi xuất hiện dưới nhiều mã hash, lịch sử dễ rối. Hãy dùng cho trường hợp cần thiết như hotfix, không thay thế được việc merge thường xuyên.
Reset đưa con trỏ nhánh về một commit khác. Có ba chế độ chính, khác nhau ở chỗ xử lý thay đổi:
| Chế độ | Lịch sử commit | Staging area | File đang làm việc |
|---|---|---|---|
| --soft | Lùi lại | Giữ nguyên thay đổi | Giữ nguyên |
| --mixed (mặc định) | Lùi lại | Bỏ | Giữ nguyên |
| --hard | Lùi lại | Bỏ | Bỏ, quay về đúng trạng thái commit |
# Gộp lại/sửa lại 2 commit gần nhất nhưng giữ codegit reset --soft HEAD~2# Bỏ khỏi staging file lỡ add nhầmgit reset HEAD ten-file.txt# Vứt hết thay đổi, quay về đúng commit cuối (nguy hiểm!)git reset --hard HEADNhớ rằng --hard xóa các thay đổi chưa commit của bạn. Chỉ dùng khi chắc chắn.
Đây là câu hỏi quan trọng khi commit đã được push:
git revert a1b2c3dNếu lỡ tay reset sai, đừng hoảng. Lệnh git reflog ghi lại mọi vị trí HEAD từng đi qua trong thời gian gần đây. Bạn có thể tìm commit cũ trong đó và quay về bằng git reset --hard <mã-hash>. Reflog chỉ tồn tại cục bộ và không giữ vĩnh viễn, nhưng thường đủ để cứu bạn trong những phút bối rối đầu tiên.
Stash để cất tạm, cherry-pick để mượn một commit, reset để làm lại lịch sử cục bộ và revert để hoàn tác an toàn trên nhánh chung. Hãy luyện tập trên một repo thử nghiệm để quen tay trước khi dùng cho dự án thật.
Bạn muốn làm chủ Git qua các bài thực hành từng bước? Có thể bắt đầu từ danh mục khóa học tại codebem.com.
Nguyễn Đình Cường
0 comment