Git Reset Vs Git Revert: So Sánh Chi Tiết Và Cách Dùng Chuẩn Chuyên Nghiệp | DC SoftTech
- Home
- Git Reset Vs Git Revert: So Sánh Chi Tiết Và Cách Dùng Chuẩn Chuyên Nghiệp | DC SoftTech
Khi làm việc với Git, việc mắc lỗi trong quá trình commit là điều khó tránh khỏi. Hai lệnh git reset và git revert sinh ra để giúp nhà phát triển hoàn tác thay đổi, nhưng chúng hoạt động theo cơ chế hoàn toàn khác nhau. Bài viết này từ đội ngũ kỹ thuật của dcsofttech.com sẽ giúp bạn phân biệt rõ ràng git reset vs git revert và lựa chọn giải pháp an toàn nhất cho dự án.
Về mặt bản chất, cả hai lệnh đều dùng để quay ngược thời gian hoặc sửa chữa lỗi code, nhưng triết lý xử lý lịch sử commit (Git History) lại đối lập:
Git Reset: Di chuyển con trỏ HEAD về một commit chỉ định trong quá khứ và xóa bỏ (hoặc thay đổi trạng thái) các commit phía sau. Lệnh này làm thay đổi lịch sử commit.
Git Revert: Tạo ra một commit mới có nội dung đảo ngược lại toàn bộ thay đổi của một commit cũ. Lệnh này không làm thay đổi lịch sử commit đã có.
| Tiêu chí | Git Reset | Git Revert |
| Cơ chế hoạt động | Di chuyển HEAD, ghi đè lịch sử Git | Tạo commit mới bù trừ (Inverted commit) |
| Thay đổi Git History | Có (Viết lại lịch sử) | Không (Bảo toàn lịch sử) |
| Mức độ an toàn | Rủi ro cao nếu dùng trên nhánh shared | An toàn tuyệt đối cho mọi nhánh |
| Môi trường phù hợp | Nhánh cá nhân (Local / Feature branch) | Nhánh chung (Main / Master / Production) |
| Phục hồi sự cố | Khó hơn (cần dùng git reflog) |
Dễ dàng (chỉ cần revert lại commit revert) |
git reset phù hợp nhất khi bạn đang làm việc độc lập trên máy local và chưa push code lên repository chung.
Lệnh git reset đi kèm với 3 tham số quan trọng:
# 1. Soft Reset: Giữ nguyên thay đổi ở Staging Area
git reset --soft <commit-hash>
# 2. Mixed Reset (Mặc định): Giữ thay đổi ở Working Directory, hủy Staging
git reset --mixed <commit-hash>
# 3. Hard Reset: Xóa sạch toàn bộ thay đổi (Cực kỳ nguy hiểm!)
git reset --hard <commit-hash>
Nên dùng khi: Muốn dọn dẹp lịch sử commit cá nhân trước khi tạo Pull Request, hoặc hủy bỏ hoàn toàn các thử nghiệm thất bại ở local.
Cảnh báo từ DC SoftTech: Đừng bao giờ chạy git reset --hard trên nhánh main đã push lên server. Việc sử dụng git push --force sau đó có thể làm đứt gãy workflow của toàn bộ team.
git revert là công cụ chuẩn mực cho các dự án làm việc nhóm hoặc các môi trường Production.
# Hoàn tác 1 commit cụ thể bằng cách tạo commit mới
git revert <commit-hash>
# Hoàn tác mà không tự động tạo commit ngay (cho phép edit thêm)
git revert -n <commit-hash>
Nên dùng khi: Bạn phát hiện ra bug trên commit đã được merge vào nhánh main/production và cần rollback an toàn mà không ảnh hưởng đến code của thành viên khác.
Ưu điểm: Giúp toàn bộ team truy vết được lý do vì sao tính năng đó bị hủy bỏ thông qua lịch sử commit minh bạch.
Để đưa ra quyết định nhanh chóng trong quá trình phát triển phần mềm, bạn có thể áp dụng quy tắc đơn giản sau:
Code đã PUSH lên Remote chưa?
|
+-------------+-------------+
| |
CHƯA RỒI
| |
Dùng GIT RESET Dùng GIT REVERT
(Đọn dẹp Local History) (An toàn cho Remote History)
Hiểu rõ sự khác biệt giữa git reset vs git revert giúp bạn làm chủ hệ thống quản lý phiên bản, tránh các sự cố mất code đáng tiếc trong quá trình vận hành dự án.
📌 DC SoftTech cung cấp các giải pháp phát triển phần mềm toàn diện và tư vấn tối ưu quy trình DevOps. Đừng quên theo dõi chuyên mục Blog Kỹ Thuật của dcsofttech.com để cập nhật thêm nhiều kiến thức lập trình hữu ích!