Trả lời nhanh: Khi agent đi sai hướng, bạn có ba mức quay lui theo thứ tự nên dùng: quay lui trong phiên để bỏ những thay đổi vừa rồi; quay về commit Git gần nhất khi phiên đã đi xa; và khôi phục từ bản sao lưu khi mọi thứ hỏng nặng. Điều quan trọng nhất không phải công cụ mà là thói quen: commit trước khi giao việc lớn, vì một commit sạch là điểm quay lui chắc chắn nhất mà không cơ chế nào thay được.
Ai giao việc cho agent đủ lâu cũng gặp cảnh nó đi lệch: sửa thêm những file không nên đụng, hoặc chọn một hướng mà bạn không muốn. Lúc đó câu hỏi duy nhất là làm sao quay về trạng thái trước đó cho nhanh và chắc. Bài này nói cả cơ chế lẫn thói quen.
Ba mức quay lui
Mức một, trong phiên. Bỏ những thay đổi agent vừa thực hiện và quay về trạng thái trước đó của phiên. Nhanh nhất, hợp khi bạn phát hiện sai ngay sau vài bước. Hạn chế là nó chỉ biết những gì diễn ra trong phiên hiện tại.
Mức hai, về commit Git. Đây là lưới an toàn thật sự:
# Xem nhung gi da thay doi so voi commit gan nhatgit statusgit diff # Bo het thay doi chua commitgit restore . # Bo ca file moi taogit clean -fdMức ba, khôi phục từ sao lưu. Dành cho trường hợp có thứ ngoài repo bị ảnh hưởng, ví dụ database hoặc file cấu hình máy chủ, theo bài về chu kỳ sao lưu.
Ghi nhớ thứ tự này để không hoảng: cái gì nằm trong Git thì luôn quay lui được, cái gì ngoài Git mới cần lo.
Thói quen commit quyết định tất cả
Cơ chế quay lui chỉ hữu ích khi bạn có điểm để quay về. Ba thói quen đáng có:
Commit trước khi giao việc lớn. Kể cả một commit tạm với thông điệp ngắn cũng đủ. Đây là việc mất mười giây và cứu bạn cả buổi.
Commit nhỏ và thường xuyên trong lúc làm. Khi agent hoàn thành một phần và bạn xem thấy ổn, hãy commit ngay thay vì để dồn. Nhờ vậy nếu phần tiếp theo hỏng, bạn chỉ mất phần đó.
Không để agent tự đẩy code lên nhánh chính. Đưa lệnh đẩy vào danh sách cấm theo bài về quyền. Đẩy rồi thì việc quay lui phức tạp hơn nhiều, nhất là khi người khác đã kéo về.
Làm trên nhánh riêng
Cách bố trí an toàn nhất cho việc giao cho agent:
# Tao nhanh rieng truoc khi giao viecgit switch -c agent/them-luong-hoan-tien # Sau khi xem lai va thay ongit switch main && git merge --no-ff agent/them-luong-hoan-tien # Neu khong dung, bo ca nhanhgit switch main && git branch -D agent/them-luong-hoan-tienLợi ích: nhánh chính của bạn luôn sạch, và việc bỏ đi toàn bộ một hướng sai chỉ tốn một lệnh. Cách này cũng cần thiết khi bạn chạy nhiều phiên song song, vì mỗi phiên nên có nhánh riêng, theo bài thiết kế đội subagent.
Với việc kéo dài nhiều ngày, thư mục làm việc riêng cho từng nhánh còn tiện hơn nữa, chi tiết ở bài Git worktree.
Nhận ra sai hướng sớm
Quay lui rẻ nhất là quay lui sớm. Bốn dấu hiệu cho thấy nên dừng lại ngay:
- Nó sửa file bạn không ngờ tới. Thường nghĩa là nó hiểu phạm vi khác bạn.
- Nó thêm thư viện mới trong khi dự án đã có công cụ tương đương.
- Nó bắt đầu sửa kiểm thử để kiểm thử chạy qua thay vì sửa code cho đúng.
- Giải thích của nó mơ hồ dần. Thường là dấu hiệu ngữ cảnh đã quá tải, xem bài quản lý ngữ cảnh.
Cách phòng hiệu quả là bắt nó trình kế hoạch trước với việc lớn, theo bài về plan mode. Phát hiện hiểu nhầm ở bước kế hoạch rẻ hơn nhiều so với phát hiện sau ba trăm dòng code.
Sau khi quay lui thì làm gì
Sai lầm phổ biến là quay lui rồi bảo nó làm lại. Kết quả thường là nó đi đúng đường cũ, vì bạn chưa nói gì khác.
Ba việc nên làm:
- Nói rõ hướng vừa rồi sai ở đâu. Không phải sai kỹ thuật mà sai so với ý định của bạn.
- Bổ sung phần bối cảnh còn thiếu. Nếu nó chọn sai vì không biết một ràng buộc, hãy ghi ràng buộc đó vào file quy ước để lần sau không lặp lại, theo bài về memory.
- Cân nhắc mở phiên mới. Phiên cũ đã chứa cả hướng sai, và nội dung đó vẫn ảnh hưởng tới các lượt sau.
Điểm thứ hai là chỗ biến một lần sai thành cải thiện lâu dài. Nếu bạn thấy mình quay lui vì cùng một lý do tới lần thứ ba, đó là dấu hiệu rõ ràng rằng file quy ước của dự án đang thiếu một điều gì đó.
Bảng ba mức quay lui và lúc dùng
| Mức | Quay lui được gì | Khi nào dùng |
|---|---|---|
| Hoàn tác trong công cụ | Vài thao tác gần nhất | Vừa nhận ra sai ngay lập tức |
| Quay về trạng thái mã nguồn đã ghi lại | Toàn bộ thay đổi từ lần ghi cuối | Đi sai hướng qua nhiều bước |
| Bỏ cả nhánh | Toàn bộ công việc của nhánh đó | Hướng tiếp cận sai từ gốc |
Mức hai là mức dùng nhiều nhất, và nó chỉ hoạt động nếu bạn có thói quen ghi lại trạng thái thường xuyên. Không ghi lại thì không có gì để quay về.
Thói quen ghi lại quyết định tất cả
# Ghi lai trang thai TRUOC khi giao mot viec longit add -A && git commit -m "truoc khi sua phan thanh toan" # Ghi lai sau moi buoc nho hoan thanh, dung doi den cuoi ngay# Ghi nhieu la re, quay lui khong duoc moi dat # Quay ve trang thai da ghi, bo moi thay doi chua ghigit reset --hard HEAD # Quay ve mot trang thai cu thegit log --oneline | head -10git reset --hard MA_TRANG_THAI # Neu da ghi nham roi muon bo: quay ve nhung giu thay doi de sua laigit reset --soft HEAD~1Dấu hiệu sớm nhất là số tệp bị sửa
- Số tệp bị sửa nhiều hơn dự kiến là dấu hiệu sớm nhất. Kiểm bằng cách xem danh sách tệp đã đổi.
- Trợ lý bắt đầu tạo tệp mới cho việc lẽ ra chỉ sửa tệp có sẵn.
- Nó giải thích dài dòng về một cách tiếp cận khác với cách bạn nghĩ. Dừng lại và làm rõ trước khi để nó đi tiếp.
- Bộ kiểm thử bắt đầu hỏng ở chỗ không liên quan.
- Cách phòng tốt: bắt lập kế hoạch trước với việc lớn. Xem bài về chế độ lập kế hoạch.
Giao lại việc thế nào sau khi quay lui
Đừng giao lại đúng yêu cầu cũ, vì kết quả sẽ tương tự. Ba việc nên làm: mô tả lại yêu cầu cụ thể hơn, nêu rõ cách tiếp cận bạn muốn; giới hạn phạm vi tệp được sửa; và nếu lỗi lặp lại nhiều lần thì viết nó thành một luật trong tệp luật dự án để không gặp lại.
Câu hỏi thường gặp
Cơ chế quay lui trong phiên có thay được Git không?
Không. Nó tiện cho việc bỏ vài bước vừa rồi, nhưng chỉ biết những gì xảy ra trong phiên hiện tại. Git mới là nơi lưu trạng thái bền vững và cho phép quay về bất kỳ điểm nào trong lịch sử.
Agent lỡ xóa file thì sao?
Nếu file đã được commit thì khôi phục dễ bằng lệnh Git. Nếu chưa từng commit thì gần như không cứu được, và đó chính là lý do nên commit trước khi giao việc lớn.
Có nên để agent tự commit không?
Nên, vì commit nhỏ và thường xuyên giúp bạn quay lui từng phần. Nhưng đừng cho nó đẩy lên kho từ xa, hãy giữ bước đó cho bạn sau khi đã xem lại thay đổi.
Làm việc trên máy chủ thì quay lui thế nào?
Y hệt, vì Git hoạt động như nhau. Điểm cộng khi làm trên máy chủ là bạn có thêm bản sao lưu định kỳ của cả máy, nên những thứ ngoài repo cũng có đường khôi phục.
