Git Revert vs Git Reset: Hoàn nguyên và Điều chỉnh Thay đổi trong Lịch sử Git

Git Revert và Git Reset là hai lệnh quan trọng trong Git để hoàn nguyên các thay đổi đã được thực hiện trong lịch sử commit của kho chứa. Dưới đây là hướng dẫn về cách sử dụng Git Revert và Git Reset:

 

Git Revert

  • Git Revert cho phép bạn tạo một commit mới để hoàn tác (revert) các thay đổi đã được commit trước đó.

  • Để revert một commit, sử dụng lệnh sau:

    git revert <commit_id>
    

    Thay thế <commit_id> bằng ID của commit mà bạn muốn hoàn tác. Commit mới sẽ được tạo ra, hoàn tác các thay đổi trong commit đã chọn.

  • Revert không thay đổi lịch sử commit, mà tạo ra một commit mới để khôi phục trạng thái trước đó.

 

Git Reset

  • Git Reset cho phép bạn quay lại một trạng thái trước đó bằng cách di chuyển HEAD và nhánh hiện tại đến một commit cụ thể.

  • Có ba chế độ khác nhau của Git Reset: --soft, --mixed (mặc định) và --hard.

  • Để reset HEAD và nhánh hiện tại đến một commit, sử dụng lệnh sau:

    git reset --mode <commit_id>
    

    Thay thế <commit_id> bằng ID của commit mà bạn muốn reset đến.

  • Các chế độ của Git Reset:

    • --soft: Di chuyển HEAD và nhánh hiện tại đến commit được chỉ định, giữ lại các thay đổi của commit trước đó trong vùng staging. Sử dụng lệnh git reset --soft <commit_id>.
    • --mixed: Đây là chế độ mặc định. Di chuyển HEAD và nhánh hiện tại đến commit được chỉ định và xóa các thay đổi của commit trước đó khỏi vùng staging. Sử dụng lệnh git reset --mixed <commit_id>.
    • --hard: Di chuyển HEAD và nhánh hiện tại đến commit được chỉ định và xóa tất cả các thay đổi của commit trước đó. Cẩn thận sử dụng, vì mọi thay đổi chưa được commit sẽ bị mất. Sử dụng lệnh git reset --hard <commit_id>.
  • Git Reset thay đổi lịch sử commit và có thể gây mất mát dữ liệu, nên hãy sử dụng nó cẩn thận.

 

Git Revert và Git Reset là hai công cụ quan trọng để hoàn nguyên và điều chỉnh lịch sử commit trong Git. Sử dụng chúng một cách thận trọng để đảm bảo tính ổn định của dự án và tránh mất mát dữ liệu.