Giới thiệu 3 cách undo commit hoặc loại bỏ commit cơ bản

Khi bạn vừa thêm một commit vào git tree, và chợt nhận ra commit vừa rồi bị sai, không hoàn chỉnh hoặc có vấn đề, bạn sẽ muốn “undo” commit hoặc loại bỏ nó. Ở đây mình sẽ giới thiệu 3 cách undo commit hoặc loại bỏ commit cơ bản.

Reset

Nhày HEAD về vị trí trước khi commit sai bằng git reset như sau

[gistpen id="1291"]

Ở đây có vài điểm cần lưu ý

  • HEAD^ có ý nghĩa giống với HEAD~ hay @^, nghĩa là quay về trước 1 commit
  • Muốn quay về trước n commit, VD 5 commit thì có thể thay bằng HEAD~5.
  • --hard có nghĩa là bỏ commit đi và bỏ cả những thay đổi chưa được commit trong working space. Khi này môi trường sẽ hoàn toàn “sạch sẽ” như thời điểm trước khi commit.
  • --soft có nghĩa là bỏ commit đi nhưng giữ nguyên những thay đổi chưa được commit trong working space. --soft hữu dụng khi bạn muốn giữ lại những thay đổi chưa commit cho lần commit tiếp theo

Revert

Git revert có thể tạo một commmit với với nội dung đảo ngược lại một commit cũ. Giả sử commit cũ có hash là (commit_hash) thì câu lệnh sẽ là:

[gistpen id="1289"]

Git revert hay được sử dụng để đảo ngược một merge commit. Nếu sau khi git revert bạn lại muốn quay lại trạng thái trước khi đảo ngược thì sao ? Câu trả lời là git revert lại chính revert commit vừa mới tạo.

–amend

Bạn có thể ghi đè lại commit mới nhất bằng option --amend của git commit

[gistpen id="1293"]

Lúc này git sẽ cho phép bạn viết lại commit message. Cách này hay dùng khi muốn sửa commit message. Nếu bạn chỉ muốn add thêm file mà không muốn sửa commit message thi có thể dùng option --no-edit

[gistpen id="1287"]

Kết luận

3 cách bên trên đây có những trường hợp sử dụng cụ thể khác nhau

  • Muốn bỏ hoàn toàn một commit sai, dùng git reset
  • Muốn “undo” một merge commit và để lại lịch sử, dùng git revert
  • Muốn thêm những thay đổi nhỏ không đáng kể và tránh bị lắt nhắt, dùng git commit --amend

Sliding Sidebar

About Me

About Me

Hello, my name is Dũng (Johnny). Welcome to my blog.

As I’m a developer, I write about topics related to the field of programming, mainly from a technical point of view. On this blog you’ll find posts which encourage discussion, information about development trends, case studies, reviews, tutorials, tips on how to improve your effectiveness, and anything else that might be fascinating to people from the IT industry.
I love PHP, NodeJS, Java,... and Fullstack.