Menu
CoddyTech

Git Reset --hard

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

git reset --hard di chuyển nhánh của bạn tới commit đích và ép cả vùng staging lẫn working tree khớp chính xác với commit đó, bỏ đi mọi thay đổi chưa commit trên đường. Đây là dạng phá hủy mạnh nhất của git reset, nên hãy chắc rằng bạn không cần phần việc hiện tại trước khi chạy.

Lỡ reset mất một commit? Hard reset thường vẫn khôi phục được nhờ git reflog. Bạn có thể thử các lệnh này an toàn trong terminal playground: một shell thật ngay trên trình duyệt.

git reset --hard đưa HEAD lùi lại và bỏ mọi thứ sau đó, kể cả staging area và working tree.

Cú pháp

LệnhTác dụng
git reset --hardBỏ mọi thay đổi chưa commit (vẫn ở HEAD)
git reset --hard HEAD~1Bỏ commit cuối cùng cùng các thay đổi của nó
git reset --hard <hash>Ép nhánh quay về một commit cụ thể
git reset --hard origin/mainCho nhánh cục bộ khớp hoàn toàn với remote

Khôi phục sau hard reset

Phần việc đã commit mà bị reset mất thường vẫn lấy lại được.

BướcLệnhKết quả
1git reflogLiệt kê các vị trí HEAD từng trỏ tới, kèm hash
2git reset --hard <hash>Quay về commit trước lần reset

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

git reset --hard thực chất làm gì?
Lệnh này di chuyển nhánh hiện tại tới commit đích và ghi đè cả vùng staging lẫn working tree cho khớp với commit đó. Mọi thay đổi chưa commit, dù đã stage hay chưa, đều bị bỏ. So với --soft (giữ thay đổi ở trạng thái staged) và --mixed (giữ thay đổi ở trạng thái unstaged), --hard là chế độ duy nhất vứt bỏ thay đổi.
Làm sao bỏ toàn bộ thay đổi cục bộ?
Chạy git reset --hard không kèm commit để đưa working tree về commit cuối cùng, xóa sạch các chỉnh sửa chưa commit. Để dọn luôn các tệp untracked mà reset không động tới, chạy thêm git clean -fd.
Làm sao reset nhánh cho khớp với remote?
Chạy git fetch rồi git reset --hard origin/main (thay bằng tên nhánh của bạn). Lệnh này ép nhánh cục bộ khớp chính xác với remote, bỏ đi các commit và thay đổi cục bộ lệch khỏi nó. Rất hữu ích khi nhánh cục bộ bị rối và bạn chỉ muốn lấy phiên bản trên remote.
Có hoàn tác được git reset --hard không?
Với phần việc đã commit thì thường là được: chạy git reflog để tìm commit mà nhánh trỏ tới trước khi reset, rồi git reset --hard <hash> để quay lại. Những thay đổi chưa từng commit (chỉ nằm trong working tree) thì không khôi phục được, nên hãy dùng --hard thận trọng.
Có thể luyện tập lệnh này online không?
Có. Mở terminal playground để chạy git reset --hard 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 reset và hoàn tác thay đổi.
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