Lưu ý: Nếu bạn đang tìm kiếm xoá commit đã push hãy tham khảo giải pháp này Làm thế nào để xóa commit đã push?. Bài viết dưới đây chỉ là hướng dẫn xóa commit "chưa" push nhưng không hiểu sao lại lọt vào kết quả tìm kiếm của Google nhiều nhất. Xin cảm ơn!
Nhiệm vụ hàng ngày của lập trình viên là viết mã, cho đến chiều tối trước khi ra về chúng ta thường kháo nhau rằng "đã commit code lên chưa đấy?". Hay thi thoảng lại nghe một câu đùa tai quái như dù trời có sập thì trước khi ra về đừng quên commit code. Vì sự thúc giục vội vàng từ ai đó mà sau khi commit xong, bạn phát hiện ra còn một tệp nữa quên chưa thêm vào cùng với commit. Tức lắm luôn mà chẳng lẽ phải thêm một commit mới để đẩy nốt lên remote?
Nhiều người chọn cách tạo một commit mới để sửa chữa lỗi lầm, nhưng điều đó hơi thừa vì có thể bạn chưa biết rằng commit chưa push lên vẫn còn khả năng sửa lại được. Vậy làm thế nào để sửa lại commit ngay lập tức?
Git cho phép chúng ta thay đổi commit cuối cùng bằng lệnh git commit --amend --no-edit
.
Ví dụ ngay khi vừa commit xong, phát hiện ra mình quên chưa add README.md:
$ git add README.md
$ git commit --amend --no-edit
Thế là xong, thay đổi của README.md lúc này đã xuất hiện trong nội dung của commit cuối cùng.
Tương tự, nếu lỡ thêm nhầm một tệp, có thể gỡ ra bằng cách dùng git reset HEAD^ path/to/file
.
Ví dụ ngay khi vừa commit xong, phát hiện ra lỡ tay add README.md vào trong commit, muốn bỏ ra thì:
$ git reset HEAD^ README.md
$ git commit --amend --no-edit
Git cũng cho phép bạn sửa lại message của commit cuối cùng bằng lệnh git commit --amend -m <message>
.
$ git commit --amend -m "edited message"
Đây là cách khi bạn muốn đem mọi thứ quay trở lại với trước khi commit. Tức là huỷ commit cuối cùng nhưng giữ lại tất cả thay đổi ở trạng thái đã git add (staged).
$ git reset --soft HEAD^
Lệnh này huỷ bỏ commit cuối cùng và đưa tất cả thay đổi trở lại staged, giúp bạn bắt đầu commit lại từ đầu.
Cách này áp dụng trong trường mới commit ở local và chưa push lên remote.
$ git reset --hard origin/branch
Với origin
là remote và branch
là nhánh đang làm việc.
Lưu ý: hard reset đồng bộ remote với local. Nghĩa là remote đang có những commit nào thì mang xuống local. Tất cả commit ở local mà không có trên remote sẽ bị xoá hết. Cẩn thận khi sử dụng.
Ví dụ tôi vừa lỡ commit vào develop
. Muốn xoá nó đi thì:
$ git reset --hard origin/develop
Bí mật ngăn xếp của Blog
Là một lập trình viên, bạn có tò mò về bí mật công nghệ hay những khoản nợ kỹ thuật về trang blog này? Tất cả bí mật sẽ được bật mí ngay bài viết dưới đây. Còn chờ đợi gì nữa, hãy bấm vào ngay!
Đăng ký nhận thông báo bài viết mới
Bình luận (3)