Tại sao xảy ra xung đột khi lưu
Hiếm có điều gì làm gián đoạn luồng lập trình như việc không thể lưu file. Bạn nhấn Ctrl+S, nhưng thay vì một cái nháy nhanh như thường lệ, một thông báo hiện lên ở góc dưới. Nó cho biết nội dung file trên đĩa cứng mới hơn. Đây không phải là lỗi—đó là một cơ chế bảo vệ.
VS Code giữ một bản "chụp nhanh" (snapshot) của file khi bạn mở nó. Nếu một tiến trình chạy ngầm hoặc người khác thay đổi file đó trên ổ cứng trong khi bạn vẫn còn những chỉnh sửa chưa lưu, dấu thời gian (timestamp) sẽ không còn khớp nhau. Để ngăn bạn vô tình ghi đè lên những nội dung mà bạn chưa xem qua, VS Code sẽ tạm dừng quá trình lưu và yêu cầu bạn xử lý.
Các nguyên nhân phổ biến
Hầu hết mọi lúc, lỗi này không quá bí ẩn. Nó thường xuất phát từ một trong 4 kịch bản sau:
- Thao tác Git: Bạn đã kéo các thay đổi mới nhất (
git pull) hoặc chuyển nhánh trong một terminal bên ngoài khi file vẫn đang mở. - Công cụ tự động: Các script chạy ngầm như hook pre-commit của
huskyhoặc lệnhprettier --writebên ngoài đã tự động chỉnh sửa code cho bạn. - Độ trễ đám mây: Dropbox hoặc OneDrive đã đồng bộ bản cập nhật 2KB từ đồng nghiệp, khiến phiên bản cục bộ của bạn trở nên "cũ" trong mắt hệ điều hành.
- Các phiên bản trùng lặp: Bạn đang mở cùng một dự án trong hai cửa sổ VS Code khác nhau hoặc một trình biên tập riêng biệt như Vim.
Các bước khắc phục
Cách 1: Công cụ So sánh (Lựa chọn thông minh nhất)
Sử dụng cách này khi bạn không chắc chắn 100% những gì đã thay đổi trên đĩa cứng. Nó giúp ngăn chặn việc mất code ở cả hai phía.
- Nhấp vào Compare trong thông báo lỗi.
- VS Code sẽ mở chế độ xem Diff song song. Ngăn bên trái hiển thị File on Disk (File trên đĩa - phiên bản lạ), và ngăn bên phải hiển thị Your Version (Phiên bản của bạn - công việc hiện tại).
- Kiểm tra các dòng code. Nếu bạn thấy một hàm ở bên trái mà bạn cần, hãy sao chép nó sang bên phải.
- Khi phía bên phải đã hoàn thiện, hãy nhấp vào Overwrite trên thanh công cụ phía trên.
Cách 2: Ghi đè cưỡng ép (Lựa chọn nhanh nhất)
Chỉ thực hiện việc này nếu bạn biết chắc chắn cửa sổ trình biên tập hiện tại chứa "Nguồn dữ liệu chuẩn" (Source of Truth).
- Tìm nút Overwrite trực tiếp trong thông báo lỗi.
- Chọn tùy chọn này sẽ xóa bỏ phiên bản trên ổ cứng và thay thế bằng nội dung hiện tại trong bộ đệm của bạn. Các thay đổi bên ngoài sẽ bị mất vĩnh viễn.
Cách 3: Hoàn tác các thay đổi (Revert)
Chọn cách này nếu bạn nhận ra các chỉnh sửa cục bộ của mình là sai lầm và phiên bản trên đĩa mới thực sự là thứ bạn muốn.
- Nhấp vào Revert.
- VS Code sẽ xóa các chỉnh sửa chưa lưu của bạn và tải lại file từ đĩa cứng. Lưu ý: Bạn không thể "Hoàn tác" (Ctrl+Z) sau khi đã revert, vì vậy hãy chắc chắn trước khi nhấp.
Tùy chỉnh cài đặt
Nếu bạn gặp lỗi này năm lần một ngày, quy trình làm việc của bạn có thể đang xung đột với hành vi mặc định của VS Code. Bạn có thể thay đổi cách trình biên tập phản ứng trong file settings.json.
Thay đổi chiến lược giải quyết xung đột
Tìm kiếm cài đặt Save Conflict Resolution. Mặc định là askUser. Chuyển sang overwriteFileOnDisk sẽ dừng các cảnh báo nhưng làm cho việc lưu file mang tính "ghi đè"—nó sẽ âm thầm xóa bỏ mọi thay đổi bên ngoài.
// settings.json
"files.saveConflictResolution": "askUser" // Giữ cài đặt này để đảm bảo an toàn
Bật Tự động lưu (Auto Save)
Xung đột thường xảy ra do chúng ta để file ở trạng thái chưa lưu quá lâu. Hãy rút ngắn khoảng thời gian đó bằng cách tự động lưu khi bạn chuyển tab.
// settings.json
"files.autoSave": "onFocusChange"
Mẹo chuyên nghiệp để phòng tránh
Để giữ cho không gian làm việc gọn gàng, hãy tích hợp các công cụ vào trong trình biên tập. Nếu bạn dùng Prettier, hãy cài đặt extension của VS Code thay vì chạy một trình theo dõi (watcher) trong terminal. Điều này cho phép extension giao tiếp trực tiếp với trình biên tập, ngăn chặn sự sai lệch dấu thời gian. Ngoài ra, hãy tập thói quen lưu tất cả các file (File > Save All) trước khi chạy các lệnh Git quan trọng trong terminal. Việc này giúp đĩa cứng và trình biên tập luôn đồng bộ hoàn hảo.

