Hướng dẫn · 26/09/2026

Git diff --check: Kiểm tra khoảng trắng và dấu xung đột trước commit

Một bản sửa nhỏ có thể kèm khoảng trắng cuối dòng hoặc dấu đánh dấu xung đột bị bỏ quên. git diff --check là bước kiểm tra nhanh trước khi commit, nhưng kết quả chỉ có ý nghĩa khi bạn biết đang kiểm tra phần chưa stage hay phần chuẩn bị commit.

Git diff --check: Kiểm tra khoảng trắng và dấu xung đột trước commit

Một bản sửa nhỏ có thể kèm khoảng trắng cuối dòng hoặc dấu đánh dấu xung đột bị bỏ quên. git diff --check là bước kiểm tra nhanh trước khi commit, nhưng kết quả chỉ có ý nghĩa khi bạn biết đang kiểm tra phần chưa stage hay phần chuẩn bị commit.

1. Kiểm tra thay đổi, không tự sửa file

Theo tài liệu Git diff, --check cảnh báo khi thay đổi đưa vào dấu đánh dấu xung đột hoặc lỗi whitespace. Quy tắc whitespace phụ thuộc core.whitespace; mặc định bao gồm khoảng trắng cuối dòng và một số trường hợp trộn space với tab ở đầu dòng.

git diff --check
git diff --cached --check

Lệnh đầu kiểm tra thay đổi giữa working tree và index; lệnh thứ hai kiểm tra phần đã stage so với HEAD trong repository đã có commit. Cả hai là kiểm tra chỉ đọc, không tự format hoặc stage lại mã.

2. Vì sao chạy xong vẫn có lỗi trong commit?

Giả sử bạn đã stage một dòng có khoảng trắng thừa rồi sửa sạch trong editor nhưng chưa stage lại. git diff --check có thể không báo lỗi ở bản đang sửa, trong khi index vẫn chứa dòng cũ. Kiểm tra --cached mới nhắm đúng nội dung sẽ được commit theo luồng commit thông thường.

Sau khi sửa, đọc lại diff của file và chỉ stage phần đã xác nhận. Không dùng một lệnh stage toàn bộ repository chỉ để làm cho kiểm tra hết lỗi, vì có thể đưa cả thay đổi không liên quan vào commit.

3. Thu hẹp phạm vi khi điều tra

git status --short
git diff --check -- src/Example.php
git diff --cached --check -- src/Example.php

Thay đường dẫn minh họa bằng file thật. File mới chưa được theo dõi không tự xuất hiện trong diff thông thường. Hãy kiểm tra danh sách file và công cụ lint phù hợp, không coi output trống là chứng nhận cho toàn bộ thư mục.

4. Đọc thông báo và mã thoát

Khi tìm thấy vấn đề, --check trả trạng thái khác 0. Trong CI hoặc script, cần đọc cả thông báo: một lệnh chạy sai đường dẫn hoặc lỗi môi trường cũng không phải là kiểm tra thành công. Không gộp --check với --exit-code, vì tài liệu xác định hai tùy chọn này không tương thích.

Nếu quy tắc khác giữa máy cá nhân và CI, kiểm tra cấu hình đang áp dụng trước khi sửa hàng loạt file. Không thay cấu hình global chỉ để làm im cảnh báo của một dự án.

5. Biết giới hạn của kiểm tra

Không có cảnh báo whitespace không chứng minh chương trình chạy đúng, không còn xung đột ngữ nghĩa hoặc không lộ bí mật. Formatter, linter, test và review vẫn có vai trò riêng. Công cụ kiểm tra diff cũng không phải trình quét mọi lỗi đã tồn tại từ trước trong toàn bộ repository.

Trong một số định dạng, khoảng trắng có ý nghĩa. Ví dụ nội dung Markdown hoặc fixture kiểm thử có thể cố tình chứa khoảng trắng. Đọc ngữ cảnh và quy ước dự án trước khi xóa tự động.

6. Checklist trước khi commit

  • Đọc git status để biết file nào đang thay đổi.
  • Kiểm tra đúng phạm vi chưa stage hoặc đã stage.
  • Sửa có chọn lọc và review lại phần được stage.
  • Chạy --cached --check trên nội dung chuẩn bị commit.
  • Chạy lint và test liên quan, không thay bằng diff-check.
  • Giữ thay đổi định dạng không liên quan ra khỏi bản sửa chức năng.

git diff --check hữu ích như một lớp kiểm tra nhỏ, nhanh và rõ phạm vi. Nó hỗ trợ review tốt hơn khi được đặt đúng chỗ trong quy trình, không phải khi được coi là dấu xác nhận chất lượng cho mọi thứ.

Thảo luận

Bình luận 0

Đăng nhập để bình luận

Bạn cần có tài khoản để tham gia thảo luận và trả lời độc giả khác.

Đăng nhậpĐăng ký

Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.