Menu
CoddyTech

Git Reflog

Cập nhật lần cuối

git reflog ghi lại mọi vị trí mà HEAD từng trỏ tới: mỗi lần commit, checkout, reset và rebase. Vì Git vẫn giữ các commit đó một thời gian kể cả khi chúng không còn thuộc nhánh nào, reflog chính là tấm lưới an toàn của bạn: nó giúp bạn tìm và khôi phục phần việc tưởng như đã mất vì reset --hard, một lần rebase hỏng hay một nhánh bị xóa.

Bạn có thể thử các lệnh này trong terminal playground: một shell thật ngay trên trình duyệt, không cần cài đặt gì.

git reflog ghi lại mọi vị trí HEAD từng đứng, nên một commit bị mất do reset hay rebase vẫn tìm lại và khôi phục được.

Cú pháp

LệnhTác dụng
git reflogHiện các vị trí gần đây của HEAD, kèm hash
git reflog show <branch>Hiện reflog của một nhánh
git reset --hard HEAD@{1}Đưa HEAD về một vị trí trước đó
git branch recovered <hash>Tạo lại nhánh tại một commit bị mất

Khôi phục sau khi lỡ tay

Hoàn tác một lần reset sai bằng cách tìm commit trước khi reset.

BướcLệnhKết quả
1git reflogTìm commit trước lần reset
2git reset --hard HEAD@{1}Đưa nhánh trở về commit đó

Câu hỏi thường gặp về git reflog

git reflog là gì?
Đây là nhật ký mọi vị trí mà HEAD (và đầu mỗi nhánh) từng trỏ tới trong repository cục bộ của bạn, sau các lần commit, checkout, reset, merge và rebase. Khác với git log vốn đi theo quan hệ cha con giữa các commit, reflog ghi lại các thao tác của bạn theo thứ tự thời gian, và đó là lý do nó hữu ích khi cần khôi phục.
Làm sao khôi phục commit sau git reset --hard?
Chạy git reflog để tìm mục ứng với commit bạn đang đứng trước khi reset (dạng HEAD@{1}), rồi chạy git reset --hard <that-hash> (hoặc HEAD@{1}) để quay về đó. Commit chưa thực sự bị xóa: chỉ là không còn nhánh nào trỏ tới nó, và reflog vẫn nhớ hash của nó.
Làm sao khôi phục một nhánh đã xóa?
Tìm commit cuối của nhánh trong git reflog, rồi tạo lại nhánh tại đó: git branch <name> <hash>. Miễn là bạn mới xóa gần đây (trong thời hạn lưu reflog của Git, thường vài tuần), các commit vẫn lấy lại được theo cách này.
git reflog có dùng được giữa các bản clone không?

Không. Reflog chỉ nằm trong repository cục bộ của bạn và không được push hay clone đi. Nó chỉ ghi lại các thao tác trên máy bạn. Vì vậy reflog cứu được lỗi cục bộ nhưng không khôi phục được thứ chỉ từng tồn tại trên một bản clone khác.

Có thể luyện tập lệnh này online không?
Có. Mở terminal playground để chạy git reflog trong một shell thật ngay trên trình duyệt, không cần cài đặt gì. Khóa học Git tương tác miễn phí của Coddy cũng hướng dẫn từng bước cách hoàn tác thay đổi và khôi phục.
Hình minh họa các ngôn ngữ lập trình của Coddy

Học Git cùng Coddy

Bắt đầu