Làm sạch Repo với git clean: Cách xóa Untracked Files an toàn và chuyên nghiệp

Git tutorial - IT technology blog
Git tutorial - IT technology blog

Bối cảnh: Khi workspace biến thành “bãi chiến trường”

Sau một ngày làm việc với hàng chục lần chạy build, cài thử thư viện hoặc debug, folder dự án của bạn thường tràn ngập file rác. Nào là file log, folder build (dist, target), hay hàng nghìn file ảnh thumbnail sinh ra khi test script.

Dùng git status, bạn sẽ thấy danh sách “Untracked files” dài dằng dặc. Xóa tay vài file thì dễ. Nhưng nếu có hàng trăm file nằm rải rác trong hàng chục folder con? Đó thực sự là một cơn ác mộng. Nhiều bạn thường nhầm rằng git checkout . hay git reset --hard sẽ dọn sạch đống này. Thực tế, hai lệnh đó chỉ tác động lên file đã được Git quản lý. Những file mới chưa bao giờ git add sẽ bị Git mặc kệ.

Mình từng làm một dự án migration, chạy script xong nó sinh ra hơn 5000 file JSON tạm. Lúc đó, git clean chính là cứu cánh giúp mình quét sạch mọi thứ chỉ trong 2 giây.

Cơ chế bảo vệ mặc định của Git

Git cực kỳ cẩn thận với lệnh xóa. Một khi đã chạy git clean, dữ liệu sẽ mất vĩnh viễn, không nằm trong thùng rác và cũng không thể undo. Vì thế, Git thiết lập chốt an toàn clean.requireForce. Nếu bạn chạy lệnh mà không kèm tham số, Git sẽ từ chối thực hiện kèm thông báo lỗi:

fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

Lỗi này buộc bạn phải xác nhận: “Tôi biết mình đang làm gì”. Bạn có thể tắt cơ chế này bằng cấu hình git config --global clean.requireForce false, nhưng mình khuyên là không nên. Hãy cứ để cái chốt đó lại để bảo vệ bạn những lúc “ngáo ngơ”.

Các lệnh git clean thực tế bạn cần biết

Để dọn dẹp an toàn, hãy thuộc lòng 3 cấp độ sau:

1. Chế độ “Xem trước” (Dry Run) – Luôn chạy lệnh này đầu tiên

Trước khi xóa thật, hãy dùng flag -n (hoặc --dry-run). Git sẽ liệt kê danh sách các file sắp bị xóa mà chưa thực sự động chạm gì đến ổ cứng.

git clean -n

Kết quả sẽ hiện ra kiểu: Would remove debug.log. Hãy kiểm tra kỹ danh sách này để đảm bảo không có file code quan trọng nào bị xóa nhầm.

2. Xóa file đơn lẻ (Force)

Khi đã chắc chắn, hãy thay -n bằng -f (force) để thực thi.

git clean -f

Lưu ý: Lệnh này mặc định chỉ xóa các file lẻ, không động vào thư mục.

3. Dọn sạch cả folder (Recursive)

Để xóa toàn bộ các thư mục rác (như folder dist/ hoặc temp_data/), bạn cần thêm flag -d.

git clean -fd

Đây là combo phổ biến nhất, giúp trả lại sự trong sạch tuyệt đối cho workspace của bạn.

4. Dọn cả file trong .gitignore

Bình thường, git clean sẽ chừa lại những gì bạn đã khai báo trong .gitignore. Tuy nhiên, nếu muốn reset dự án về trạng thái “nguyên thủy” như lúc mới clone, hãy dùng flag -x.

git clean -fdx

Cảnh báo cực mạnh: Lệnh này sẽ xóa sạch file .env chứa mật khẩu database hoặc các folder library (node_modules). Chỉ dùng khi bạn muốn build lại mọi thứ từ đầu.

5. Chế độ tương tác (Interactive)

Nếu muốn chọn lọc từng file để giữ hoặc xóa, hãy dùng flag -i.

git clean -fd -i

Git sẽ hiện menu chọn lựa. Cách này hơi chậm nhưng cực kỳ an toàn nếu bạn đang đối mặt với một đống file hỗn độn.

Duy trì repo sạch sẽ trong dự án thực tế

Sau khi clean, hãy check lại bằng git status. Nếu thấy dòng “working tree clean” là bạn đã thành công.

Trong team mình, mỗi khi merge một nhánh lớn, anh em thường chạy git clean -fd. Việc này ngăn chặn file rác từ nhánh cũ bị commit nhầm lên nhánh mới, gây nhiễu khi review code.

Một mẹo nhỏ: Nếu bạn thấy mình phải dùng git clean quá thường xuyên cho một loại file, hãy đưa nó vào .gitignore. Với các folder cấu hình IDE như .vscode hay .idea, hãy cấu hình chúng vào gitignore global để không phải lo lắng mỗi khi dọn dẹp.

Hãy nhớ quy trình chuẩn: Check status -> Dry run (-n) -> Thực thi (-f). Chúc bạn có những commit sạch đẹp!

Share: