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ì.
Cú pháp
| Lệnh | Tác dụng |
|---|---|
git reflog | Hiệ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ước | Lệnh | Kết quả |
|---|---|---|
| 1 | git reflog | Tìm commit trước lần reset |
| 2 | git 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ì?
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?
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?
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?
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.