Tôi vừa lỡ commit sai, làm sao để sửa lại ngay lập tức?

Tôi vừa lỡ commit sai, làm sao để sửa lại ngay lập tức?

Tin ngắn hàng ngày dành cho bạn
  • Void - cái tên mình đã nhắc đến từ cách đây khá lâu. Từ đợt mà continue.dev mới nổi lên á. Nó tương tự như Cursor và Windsurf, mới hôm nay họ đã phát hành phiên bản Beta và cho phép mọi người tải xuống.

    Điểm mạnh thì đây là nguồn mở, miễn phí, dùng các mô hình miễn phí cục bộ trên máy qua Ollama hoặc LM Studio... Không thích thì cắm API của bên khác vào cũng được. Mình vừa dùng thử thì thấy khả năng gợi ý và khung chat khá tương đồng với Cursor, có cả tính năng Agent luôn nhé 👏. Hoạt động ổn định hơn continue.dev (lần cuối dùng), việc còn lại là chọn mô hình xịn xịn tí 🤤

    » Xem thêm
  • Zed mới đây đã giới thiệu thêm tính năng Agent - tương tự như Agent trong Cursor hay Write trong Windsurf và họ gọi nó là The Fastest AI Code Editor.

    Cũng nhanh thật đấy vì Zed viết bằng Rust. Cơ mà chiến lược của họ có vẻ thay đổi, tập trung vào AI thay vì phát triển kho tiện ích mở rộng vốn đang có rất ít, không thể cạnh tranh được với VSCode 🥶

    Zed: The Fastest AI Code Editor

    » Xem thêm
  • Ngay sau thông tin OpenAI đạt được thoả thuận mua lại Windsurf với giá 3 tỉ đô thì ngày hôm nay Cursor đã miễn phí 1 năm dùng bản Pro cho sinh viên. Chaaaaà 🤔

    OpenAI Reaches Agreement to Buy Startup Windsurf for $3 Billion

    Cursor for Students | Cursor - The AI Code Editor

    » Xem thêm

Vấn đề

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?

Thêm nội dung mới vào commit

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.

Bỏ nội dung khỏi commit

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

Sửa lại message của commit

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"

Soft reset

Đâ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.

Xoá commit chưa push mà không cần revert

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
Cao cấp
Hello

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (3)

Nội dung bình luận...
Avatar
Ẩn danh7 tháng trước
Muốn sửa lại message của commit cũ ko phải commit gần nhất, thì làm sao ạ?
Trả lời
Avatar
Xuân Hoài Tống7 tháng trước
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.
Avatar
Lê Kế Hiền1 năm trước
vậy dùng source tree cho dễ =)) cl rối rắm
Trả lời
Avatar
Trịnh Cường2 năm trước
"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
Trả lời
Avatar
Xuân Hoài Tống2 năm trước
Đú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