5 phút đọc

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ạnMục cũ bị dọn sau ~30-90 ngày
Chỉ máy bạnKhô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.