Giao diện
4. Reflog (The Life Saver)
TIP
SECRET: Git KHÔNG BAO GIỜ xóa cái gì ngay lập tức. Kể cả khi bạn git reset --hard hay xóa branch, code vẫn nằm đâu đó trong database của Git khoảng 30 ngày.
4.1 Reflog là gì?
Reference Logs. Nó là hộp đen ghi lại mọi hành động con trỏ HEAD đã di chuyển. Kể cả những hành động không tạo ra commit (như reset, rebase, checkout).
4.2 Cứu dữ liệu (git reflog)
Kịch bản thảm họa: Bạn lỡ tay git reset --hard và mất sạch code cả buổi chiều. Bạn hoảng loạn? Đừng lo.
Xem lại lịch sử di chuyển:
bashgit reflogOutput:
texta1b2c3d HEAD@{0}: reset: moving to HEAD~1 99e8d7f HEAD@{1}: commit: add super cool feature (Đây là cái bạn vừa mất)Khôi phục: Bạn thấy
99e8d7fchính là thời điểm trước khi bạn reset. Hãy reset về đó:bashgit reset --hard 99e8d7f-> Bùm! Code đã trở lại.
✦
✧
✦
PREMIUM
HPN Interview Kit
Bộ câu hỏi phỏng vấn Big Tech
- ✓ 200+ câu hỏi thực tế từ FAANG
- ✓ Giải thích chi tiết bằng Tiếng Việt
- ✓ Cập nhật liên tục 2025
🧠 Quiz
Câu 1: Git Reflog ghi lại thông tin gì?
- [ ] A) Lịch sử tất cả commits trên remote
- [ ] B) Danh sách tất cả branches đã tạo
- [x] C) Lịch sử mọi thay đổi của HEAD và branch tips trên local repository
- [ ] D) Log của tất cả git commands đã chạy
💡 Giải thích: Reflog (reference log) ghi lại mỗi lần HEAD hoặc branch tip thay đổi trên local. Bao gồm commit, reset, checkout, rebase, merge... Đây là "safety net" cuối cùng để recovery.
Câu 2: Sau khi chạy git reset --hard HEAD~3 nhầm, làm cách nào recovery?
- [ ] A) Không thể recovery, data đã mất vĩnh viễn
- [x] B) Dùng
git reflogtìm SHA của commit trước khi reset, rồigit reset --hard <SHA> - [ ] C) Dùng
git undođể hoàn tác - [ ] D) Clone lại repository từ remote
💡 Giải thích:
git refloglưu lại mọi vị trí HEAD đã đi qua. Sau reset nhầm, dùngreflogtìm SHA commit trước đó (ví dụHEAD@{1}), rồigit reset --hard <SHA>để quay về. Reflog là "life saver" thực sự.
Câu 3: Reflog entries bị xóa sau bao lâu theo mặc định?
- [ ] A) Ngay lập tức sau khi
git gc - [ ] B) 7 ngày
- [x] C) 90 ngày cho reachable entries, 30 ngày cho unreachable entries
- [ ] D) Không bao giờ bị xóa
💡 Giải thích: Mặc định,
git gcxóa reflog entries unreachable sau 30 ngày và reachable sau 90 ngày. Đây là lý do cần recovery sớm - càng để lâu, càng có nguy cơ reflog bị garbage collected.