Menu
CoddyTech

Git: hoàn tác commit cuối

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

Để hoàn tác commit gần nhất, trước tiên hãy quyết định số phận các thay đổi của nó. Giữ chúng ở trạng thái staged bằng git reset --soft HEAD~1, giữ ở trạng thái unstaged bằng git reset HEAD~1 thông thường, hoặc bỏ đi bằng git reset --hard HEAD~1. Nếu commit chỉ sai một chút, git commit --amend sửa nó ngay tại chỗ. Nếu commit đã được push, hãy dùng git revert thay vì viết lại lịch sử. Để hoàn tác một commit cũ hơn hoặc nhiều commit cùng lúc, xem trang git undo commit.

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ì.

Hoàn tác commit cuối cùng sẽ đưa HEAD lùi một bước. Chế độ bạn chọn quyết định thay đổi vẫn ở staging area, ra khỏi staging area hay bị bỏ đi.

Chọn cách xử lý thay đổi

Mục tiêuLệnh
Hủy commit, thay đổi vẫn stagedgit reset --soft HEAD~1
Hủy commit, thay đổi trở về unstagedgit reset HEAD~1
Hủy commit, bỏ luôn thay đổigit reset --hard HEAD~1
Sửa commit cuối (thông điệp hoặc tệp)git commit --amend
Hoàn tác commit đã pushgit revert HEAD

Ví dụ từng bước

Hoàn tác commit cuối và commit lại với thông điệp rõ ràng hơn.

BướcLệnhKết quả
1git reset --soft HEAD~1Commit bị gỡ, thay đổi vẫn ở trạng thái staged
2git commit -m "clearer message"Commit lại đúng các thay đổi đó

Câu hỏi thường gặp về hoàn tác commit cuối trong Git

Làm sao hoàn tác commit cuối mà vẫn giữ thay đổi?
Chạy git reset --soft HEAD~1. Lệnh này gỡ commit cuối nhưng giữ thay đổi của nó ở trạng thái staged, để bạn commit lại ngay. Nếu muốn thay đổi nằm ở trạng thái unstaged trong working tree, dùng git reset HEAD~1 (chế độ mặc định).
Làm sao hoàn tác commit cuối và xóa luôn thay đổi?
Chạy git reset --hard HEAD~1. Lệnh này gỡ commit và bỏ các thay đổi của nó khỏi working tree. Đây là thao tác phá hủy: nếu có thể bạn sẽ cần phần việc đó, hãy dùng --soft, hoặc khôi phục sau bằng git reflog.
Nếu chỉ cần sửa thông điệp commit thì sao?
Dùng git commit --amend. Lệnh này mở lại commit cuối để bạn sửa thông điệp (và stage lại tệp nếu cần) mà không tạo commit riêng. Tránh amend một commit đã push, vì làm vậy là viết lại lịch sử.
Làm sao hoàn tác commit cuối sau khi đã push?
Dùng git revert HEAD. Revert tạo một commit mới đảo ngược commit cuối, giữ nguyên lịch sử: lựa chọn an toàn cho nhánh dùng chung. Reset một commit đã push sẽ buộc mọi người phải xử lý một nhánh bị viết lại.
Có thể luyện tập lệnh này online không?

Có. Mở terminal playground để chạy các lệnh này 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.

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