5 phút đọc

Reset vs Revert

Reset vs Revert

Khi muốn hủy bỏ một commit, Git cho hai lựa chọn bản chất khác nhau: resetrevert. Chọn sai có thể làm hỏng lịch sử chung.

1. git reset: dời con trỏ

git reset dời con trỏ nhánh về một commit trước đó, hiệu quả là xóa các commit sau khỏi nhánh. Đây là viết lại lịch sử, nên chỉ an toàn khi commit chưa được push.

Ba chế độ:

Chế độStagingWorking directory
--softGiữGiữ
--mixedUnstageGiữ
--hardXóaXóa (nguy hiểm)
git reset --soft HEAD~1   # giữ thay đổi đã stage
git reset --hard HEAD~1   # xóa sạch

2. git revert: commit đảo ngược

git revert <commit> tạo một commit mới có nội dung đảo ngược commit cũ. Lịch sử không bị xóa — commit gốc vẫn còn, chỉ thêm một commit "hoàn tác" phía trên.

# Đảo ngược an toàn một commit đã push
git revert abc1234

3. Chọn cái nào?

  • Commit chưa push, còn cục bộ → reset.
  • Commit đã push lên nhánh chia sẻ → revert (không viết lại lịch sử).

Cách nhớ nhanh

Reset = dời lùi con trỏ (chưa push). Revert = thêm commit đảo ngược (đã push). Đã chia sẻ thì luôn revert.