Vấn đềChuyện này xảy ra với cả những lập trình viên giỏi nhất: bạn vừa hoàn thành một phiên viết mã kéo dài ba giờ và định commit công việc của mình, nhưng lại bị chặn bởi một lỗi cứng đầu. Bạn nhấp vào dấu tích trong bảng Source Control của VS Code hoặc chạy lệnh git commit, nhưng thay vì thông báo thành công, bạn lại thấy thông báo này:
fatal: Unable to create '.git/index.lock': File exists.
Lỗi này khiến quy trình làm việc của bạn bị đình trệ hoàn toàn. Bạn không thể stage file, chuyển nhánh hoặc pull các bản cập nhật cho đến khi lỗi được giải quyết.
Điều gì thực sự đang xảy ra?Git sử dụng một file nhỏ 0-byte có tên là index.lock như một cơ chế an toàn. Hãy coi nó như một biển báo "Miễn làm phiền". Nó đảm bảo rằng tại một thời điểm chỉ có một tiến trình—như tính năng đồng bộ hóa ngầm của VS Code hoặc lệnh thủ công từ terminal của bạn—có thể thay đổi repository. Điều này giúp ngăn dữ liệu của bạn bị hỏng do các cập nhật chồng chéo.
Thông thường, Git tạo file này, hoàn thành nhiệm vụ trong vài mili giây và xóa file ngay lập tức. Tuy nhiên, nếu một tiến trình bị crash hoặc bị gián đoạn, file lock sẽ vẫn còn đó. Điều này thường xảy ra nếu tính năng auto-fetch của VS Code kích hoạt đúng lúc bạn đang cố gắng commit, hoặc nếu máy tính của bạn chuyển sang chế độ ngủ trong khi đang thực hiện một lệnh git pull lớn.
Giải pháp 1: Dọn dẹp thủ côngCách khắc phục nhanh nhất là chỉ cần xóa file lock còn sót lại. Vì tiến trình gốc tạo ra nó có lẽ đã không còn hoạt động, việc xóa nó sẽ báo cho Git biết rằng repository đã sẵn sàng để làm việc trở lại.
Sử dụng Terminal trong VS CodeMở terminal tích hợp (Ctrl + `) và chạy lệnh tương ứng với hệ điều hành của bạn:
macOS hoặc Linux:
rm .git/index.lock
Windows (PowerShell):
del .git/index.lock
Lưu ý: Nếu bạn gặp lỗi 'Permission Denied', bạn có thể cần đóng hoàn toàn VS Code và chạy terminal với quyền Administrator.
Giải pháp 2: Dừng các tiến trình "ma"Đôi khi, việc cố gắng xóa file sẽ dẫn đến lỗi "File in use" (File đang được sử dụng). Điều này có nghĩa là một tiến trình Git vẫn đang chạy ngầm và không chịu giải phóng file. Bạn sẽ cần phải buộc nó dừng lại.
Windows- Nhấn Ctrl + Shift + Esc để mở Task Manager.- Tìm git.exe hoặc Git for Windows. Bạn có thể thấy nhiều phiên bản nếu Git bị kẹt.- Nhấp chuột phải vào từng cái và chọn End Task (Kết thúc tác vụ).### macOS/Linux- Trong terminal, tìm ID tiến trình (PID) bằng cách chạy: ps aux | grep git- Xác định PID (thường là một số có 4 hoặc 5 chữ số như 4021).- Buộc tiến trình dừng lại: kill -9 <PID>## Giải pháp 3: Kiểm soát tính năng Auto-Fetch của VS CodeNếu bạn thường xuyên gặp lỗi này, tính năng "Auto Fetch" của VS Code có thể là nguyên nhân. Theo mặc định, VS Code chạy lệnh git fetch mỗi 3 phút để kiểm tra các thay đổi từ xa. Nếu việc kiểm tra ngầm này trùng lặp với các lệnh thủ công của bạn, nó sẽ gây ra xung đột file lock.
Để tắt tính năng này:
- Mở Settings (Ctrl + ,).- Tìm kiếm
git.autofetch.- Bỏ chọn ô này.Giờ đây, bạn sẽ cần nhấp vào biểu tượng làm mới trong chế độ xem Source Control để xem các bản cập nhật từ xa, nhưng bạn sẽ giảm đáng kể các rắc rối liên quan đến việc khóa file.
Kiểm tra lạiSau khi xóa file, hãy kiểm tra xem Git đã trở lại bình thường chưa bằng cách chạy lệnh git status. Nếu nó hiển thị thông tin nhánh của bạn mà không có lỗi, bạn đã thành công. Hãy thử commit thử để chắc chắn:
git add .
git commit -m "kiểm tra sửa lỗi lock"

