Reflog
Reflog
Khi lỡ tay xóa commit bằng reset --hard hay làm rebase hỏng, thứ cứu bạn thường là reflog — cuốn nhật ký Git tự ghi về mọi nơi HEAD từng đi qua.
1. Reflog là gì?
Reflog (reference log) ghi lại mọi lần HEAD dịch chuyển: commit, checkout, reset, merge, rebase. Mỗi mục có một tham chiếu HEAD@{n} để bạn quay về đúng thời điểm.
git reflog
# 9f3a1c2 HEAD@{0}: reset: moving to HEAD~3
# a1b2c3d HEAD@{1}: commit: add validation
2. Vì sao là phao cứu sinh?
Sau reset --hard, các commit cũ trở thành commit mồ côi dangling commit — không nhánh nào trỏ tới, nhưng vẫn tồn tại cho tới khi bị dọn rác garbage collection. Reflog còn nhớ hash của chúng nên bạn khôi phục được.
# Tìm trạng thái trước khi reset rồi quay về
git reset --hard HEAD@{1}
# Dựng lại nhánh đã xóa nhầm
git branch feature-login a1b2c3d
3. Giới hạn cần nhớ
| Đặc điểm | Ý nghĩa |
|---|---|
| Cục bộ | Không clone, không push lên remote |
| Có thời hạn | Mục cũ bị dọn sau ~30-90 ngày |
| Chỉ máy bạn | Không thay thế cho backup thật |
Cách nhớ nhanh
Reflog = hộp đen của HEAD. Hoảng vì mất commit? Chạy git reflog, tìm HEAD@{n}, rồi reset --hard về đó. Nhớ: cục bộ và có hạn dùng.