Mục lục

Rollback Strategies: Khi mọi thứ sụp đổ

Phân biệt Reset, Revert và Checkout. Cách ứng cứu trong Docker/Production khi code lỗi và bí thuật 'Time Machine' với Git Reflog.

Trong nghề lập trình, biết cách "sửa sai" đôi khi quan trọng hơn biết cách "làm đúng". Git cung cấp nhiều cách để quay lại quá khứ, nhưng dùng sai cách sẽ làm mất dữ liệu vĩnh viễn.

1. Tam giác vàng: Reset - Revert - Checkout

LệnhTác độngKhi nào dùng?
ResetXóa bỏ lịch sử (Viết lại quá khứ).Sửa lỗi khi chưa Push code lên server.
RevertTạo một commit mới đảo ngược lại commit cũ.An toàn nhất trên server. Dùng khi code đã được push.
CheckoutChỉ di chuyển HEAD (con trỏ) sang điểm khác.Dùng để xem lại code cũ mà không làm thay đổi gì.

2. Bí thuật Git Reflog (Cứu tinh cuối cùng)

Bạn vừa lỡ tay git reset --hard và mất sạch công sức 1 tuần làm việc? Đừng reset máy tính! Git vẫn lưu lại lịch sử di chuyển của HEAD trong 30-90 ngày qua.

bash:
git reflog

Bạn sẽ thấy danh sách mọi hành động mình từng làm. Hãy tìm mã Hash trước khi bạn lỡ tay xóa và:

bash:
git reset --hard <hash-phuc-hoi>

Reflog chính là "Hộp đen" máy bay cho repository của bạn.

3. Rollback trên Production (Hotfix)

Khi code lỗi đã lên Production, quy trình chuẩn là:

  1. Revert thay vì xóa commit. Điều này giúp team biết chuyện gì đã xảy ra.
  2. Nếu dùng CI/CD, hãy Redeploy bản build cũ (Last known good building) thay vì chờ build bản fix mới. Tốc độ là tiên quyết.

4. Sửa commit cuối cùng (Amend)

Lỡ tay commit nhưng quên chưa add 1 file hoặc gõ sai message?

bash:
git add .
git commit --amend --no-edit

Hành động này sẽ "gộp" những thay đổi mới vào commit vừa rồi mà không tạo ra commit mới rác rưởi.

Kết luận

  • Dùng Revert cho các nhánh chung (main/develop).
  • Dùng Reset cho các nhánh cá nhân.
  • Luôn biết đến sự tồn tại của Reflog.

Hãy nhớ: Trong Git, gần như không có gì bị xóa "thật sự" cho đến khi Git chạy cơ chế dọn rác (Garbage Collection) định kỳ.

Quảng cáo
mdhorizontal