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
5 bài học sâu sắc
Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? 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)
Muốn sửa lại message của commit cũ ko phải commit gần nhất, thì làm sao ạ?
Muốn sửa lại message của commit cũ ko phải commit gần nhất, thì làm sao ạ?
Hơi khó em ạ, nếu thế em phải làm một số lệnh rồi force push lên remote. Mà để làm vậy thì tương đối khó, vì chẳng ai dám force push vì phát sinh nhiều vấn đề trong làm việc nhóm. Còn nếu dự án của em, một mình em làm thì em có thể force nếu muốn.
vậy dùng source tree cho dễ =)) cl rối rắm
vậy dùng source tree cho dễ =)) cl rối rắm
"Lưu ý rằng việc này cũng đồng nghĩa với những commit chưa push ở local sẽ bị mất hết và bạn sẽ phải viết lại.". câu này có nghĩa là những đoạn code thay đổi ở commit đó cũng mất hết à bạn
"Lưu ý rằng việc này cũng đồng nghĩa với những commit chưa push ở local sẽ bị mất hết và bạn sẽ phải viết lại.". câu này có nghĩa là những đoạn code thay đổi ở commit đó cũng mất hết à bạn
Đúng rồi bạn, vì lệnh đó là reset lại branch local cho giống y hệt remote nên commit bạn chưa push ở local cũng sẽ bị mất hết