Một đoạn README dài một dòng chỉ đổi một thời hạn, nhưng diff thông thường tô cả dòng cũ và dòng mới. Bạn có thể đọc kỹ hai dòng, hoặc yêu cầu Git thể hiện phần khác nhau ở mức từ để định vị chỗ cần review nhanh hơn.
Bài này dùng git diff --word-diff=plain trên một repository tạm. Không sửa repository đang làm việc, không tạo remote và không đẩy commit. Mục tiêu là đọc thay đổi, không thay thế kiểm thử ý nghĩa của tài liệu.
Điều kiện và phạm vi
Ví dụ đã chạy bằng Git 2.54.0 ngày 11/11/2026, với cấu hình Git hệ thống và global được cô lập cho fixture kiểm tra. Các lệnh dưới đây phù hợp shell Bash và tạo dữ liệu minh họa trong thư mục tạm mới.
Tài liệu Git mô tả cách tách từ mặc định theo khoảng trắng. Chế độ plain đánh dấu phần bỏ bằng [-...-] và phần thêm bằng {+...+}. Vì dấu phân cách không được escape khi đã xuất hiện trong đầu vào, output có thể mơ hồ. Đừng dùng định dạng này làm giao thức phân tích dữ liệu tự động.
1. Tạo thay đổi nhỏ trong một dòng dài
demo_dir=$(mktemp -d)
git -C "$demo_dir" init -q
printf '%s\n' 'Review the draft within three working days.' > "$demo_dir/guide.txt"
git -C "$demo_dir" add guide.txt
git -C "$demo_dir" -c user.name='Demo' -c user.email='[email protected]' commit -qm 'Add guide'
printf '%s\n' 'Review the draft within five working days.' > "$demo_dir/guide.txt"
git -C "$demo_dir" --no-pager diff --no-color -- guide.txt
git -C "$demo_dir" --no-pager diff --no-color --word-diff=plain -- guide.txt
Trong fixture, unified diff có một dòng bỏ và một dòng thêm. Word diff cho dòng nội dung Review the draft within [-three-]{+five+} working days.. Bạn thấy ngay phần đổi thời hạn mà không cần đoán từ vị trí con trỏ.
Lệnh chỉ đọc diff không stage file và không tạo commit mới. Sau khi xem, git -C "$demo_dir" status --short vẫn thể hiện file bị sửa trong working tree. Việc chuyển cách trình bày không thay đổi bản chất dữ liệu đang review.
2. Chọn đúng hai phía trước khi đổi cách hiển thị
git -C "$demo_dir" add guide.txt
git -C "$demo_dir" --no-pager diff --no-color --word-diff=plain -- guide.txt
git -C "$demo_dir" --no-pager diff --no-color --cached --word-diff=plain -- guide.txt
Sau khi stage, lệnh diff đầu trong block này không có nội dung vì working tree và index giống nhau. Lệnh có --cached vẫn cho thay đổi từ three sang five, do nó so index với HEAD. Fixture đã xác nhận cả hai điều kiện đó.
Đây là điểm cần kiểm tra trước khi kết luận “Git không thấy thay đổi”. Tùy chọn word-diff chỉ đổi cách diễn đạt khác biệt. Nó không tự chọn giúp bạn working tree, index hay hai commit mà bạn muốn đối chiếu.
3. Khi thay đổi nằm trong một từ
Nếu đổi một mã như task-123 sang task-124, tách từ theo khoảng trắng có thể đánh dấu cả mã. Bạn có thể thử tùy chọn --word-diff-regex=. để coi từng ký tự khớp regex như một đơn vị so sánh.
Trong lần review thật, hãy bắt đầu với cách mặc định rồi mới thêm regex khi cần. Regex tùy chỉnh có thể bỏ qua những phần không khớp khỏi việc xác định khác biệt. Nếu regex chỉ khớp chữ và số, dấu câu quan trọng có thể không được trình bày như bạn mong đợi.
Bài này không chạy fixture Unicode theo grapheme, diff driver tùy chỉnh hay thuật toán riêng. Đừng suy ra rằng một ký tự regex luôn tương đương một ký tự người dùng nhìn thấy trong mọi ngôn ngữ.
Kiểm tra kết quả và dọn fixture
Đọc cả câu sau khi xem phần đánh dấu: đổi three thành five có đúng quyết định sản phẩm không? Word diff giúp tìm chỗ đổi, không thể xác nhận chính sách thời hạn. Với tài liệu lớn, kiểm tra thêm heading, liên kết và các đoạn lân cận.
Thư mục thử nằm tại giá trị của demo_dir; bạn có thể mở nó để xem file và xóa riêng thư mục đó khi đã xong. Không thay đường dẫn bằng repository thật để “thử nhanh” những thao tác stage hoặc commit. Bài không cần lệnh reset, clean hay thay lịch sử.
Kết luận
Word diff hữu ích khi một dòng dài chỉ đổi vài từ. Chọn đúng phạm vi so sánh, hiểu dấu đánh dấu và luôn đọc lại ý nghĩa cả câu trước khi duyệt.

