Git Revert
Cập nhật lần cuối
git revert hoàn tác một commit bằng cách tạo một commit mới áp dụng phần đảo ngược của các thay đổi trong commit đó. Vì lệnh này thêm lịch sử thay vì viết lại, revert là cách an toàn để hoàn tác một commit đã push. Khác với git reset, nó không buộc mọi người phải xử lý một nhánh bị viết lại.
Bạn có thể thử các lệnh này trong terminal playground: một shell thật ngay trên trình duyệt, không cần cài đặt gì.
Cú pháp
| Lệnh | Tác dụng |
|---|---|
git revert HEAD | Revert commit gần nhất |
git revert <hash> | Revert một commit cụ thể theo hash |
git revert HEAD~2..HEAD | Revert một dải commit |
git revert -n <hash> | Revert nhưng chưa commit (chỉ stage) |
git revert -m 1 <merge-hash> | Revert một merge commit, giữ commit cha số 1 |
Trong lúc revert
Nếu revert gặp xung đột, hãy giải quyết rồi tiếp tục.
| Lệnh | Tác dụng |
|---|---|
git revert --continue | Tiếp tục sau khi giải quyết xung đột |
git revert --abort | Hủy lần revert đang dở |
git revert --skip | Bỏ qua commit hiện tại và tiếp tục |
revert và reset
| Đặc điểm | git revert | git reset |
|---|---|---|
| Viết lại lịch sử | Không | Có |
| An toàn với commit đã push | Có | Không |
| Tạo commit mới | Có | Không |
| Hoàn tác một commit ở giữa | Có | Khá rắc rối |
Câu hỏi thường gặp về git revert
git revert và git reset khác nhau thế nào?
git revert thêm một commit mới để hoàn tác thay đổi của một commit trước đó, giữ nguyên lịch sử, nên an toàn với commit bạn đã push. git reset lùi con trỏ nhánh và viết lại lịch sử, ổn với commit cục bộ nhưng nguy hiểm trên nhánh dùng chung. Dùng revert để hoàn tác commit đã công khai, reset để hoàn tác commit cục bộ.Làm sao revert một commit đã push?
git revert <hash> (hoặc git revert HEAD cho commit mới nhất), rồi push commit revert mới. Vì revert không viết lại lịch sử, đây là cách đúng để hoàn tác một commit dùng chung: không cần force push và không làm phiền đồng đội đã pull commit đó về.Làm sao revert một merge commit?
git revert -m 1 <merge-hash>, trong đó -m 1 bảo Git giữ commit cha đầu tiên (thường là nhánh bạn merge vào). Revert một merge sẽ hoàn tác các thay đổi đã merge nhưng vẫn giữ lần merge trong lịch sử.Có revert nhiều commit cùng lúc được không?
git revert HEAD~2..HEAD để revert hai commit cuối, hoặc liệt kê nhiều hash. Mặc định Git tạo một commit revert cho mỗi commit bị revert; thêm -n để stage toàn bộ phần đảo ngược mà chưa commit, rồi tự tạo một commit duy nhất.Có thể luyện tập lệnh này online không?
git revert trong một shell thật ngay trên trình duyệt, không cần cài đặt gì. Khóa học Git tương tác miễn phí của Coddy cũng hướng dẫn từng bước cách hoàn tác thay đổi.