Câu trả lời ngắn:
git reset 'HEAD@{1}'
Câu trả lời dài:
Git giữ một bản ghi của tất cả các cập nhật ref (ví dụ: thanh toán, đặt lại, cam kết, hợp nhất). Bạn có thể xem nó bằng cách gõ:
git reflog
Đâu đó trong danh sách này là cam kết mà bạn đã mất. Giả sử bạn vừa gõ git reset HEAD~
và muốn hoàn tác nó. Reflog của tôi trông như thế này:
$ git reflog
3f6db14 HEAD@{0}: HEAD~: updating HEAD
d27924e HEAD@{1}: checkout: moving from d27924e0fe16776f0d0f1ee2933a0334a4787b4c
[...]
Dòng đầu tiên nói rằng HEAD
0 vị trí trước đây (nói cách khác, vị trí hiện tại) là 3f6db14; nó đã đạt được bằng cách đặt lại HEAD~
. Dòng thứ hai nói rằng HEAD
1 vị trí trước (nói cách khác, trạng thái trước khi đặt lại) là d27924e. Nó có được bằng cách kiểm tra một cam kết cụ thể (mặc dù điều đó không quan trọng ngay bây giờ). Vì vậy, để hoàn tác thiết lập lại, hãy chạy git reset HEAD@{1}
(hoặc git reset d27924e
).
Mặt khác, nếu bạn đã chạy một số lệnh khác kể từ đó cập nhật CHÍNH, thì cam kết bạn muốn sẽ không đứng đầu danh sách và bạn sẽ cần tìm kiếm trong đó reflog
.
Một lưu ý cuối cùng: Có thể dễ dàng hơn khi xem xét reflog
chi nhánh cụ thể mà bạn muốn hủy đặt lại, nói chính chủ, thay vì HEAD
:
$ git reflog show master
c24138b master@{0}: merge origin/master: Fast-forward
90a2bf9 master@{1}: merge origin/master: Fast-forward
[...]
Điều này sẽ có ít tiếng ồn hơn so với chung HEAD reflog
.