Menu

So sánh văn bản / Kiểm tra khác biệt

So sánh hai khối văn bản hoặc code cạnh nhau, khác biệt theo dòng và theo từ.

Tác giả Nethanel Bar, Co-founder & CEO

Cập nhật lần cuối

Sẵn sàng học code thật sự?

Coddy dạy bạn bằng cách viết code thật ngay trên trình duyệt: bài học tương tác, phản hồi tức thì và AI hỗ trợ khi bạn bị kẹt.

Diff checker là gì?

Diff checker so sánh hai đoạn văn bản hoặc code và làm nổi bật những gì được thêm, xóa hay sửa. Lập trình viên dùng diff liên tục: review code, gỡ lỗi khi cấu hình thay đổi, so sánh response của API, kiểm tra migration và hiểu rõ các chỉnh sửa trước khi commit.

Đọc diff là kỹ năng cốt lõi của lập trình viên. Nó giúp tách *thay đổi hành vi thật sự* khỏi việc định dạng lại vô hại và giúp bạn phát hiện một ký tự bị sửa trong khối 200 dòng. Khi đã quen nhịp xanh / đỏ / vàng, việc review code sẽ nhanh hơn nhiều.

Hai kiểu diff quan trọng nhất là *diff theo dòng* (dòng nào thay đổi) và *diff theo từ* hay *diff theo ký tự* (cái gì thay đổi bên trong một dòng). Một công cụ diff tốt cho bạn chuyển qua lại giữa hai kiểu, tùy bạn đang so sánh mã nguồn hay các đoạn văn.

Những điều bạn học được khi so sánh văn bản

  • Diff theo dòng cho biết thay đổi xảy ra *ở đâu*. Diff theo từ và theo ký tự cho biết *cái gì* thay đổi bên trong một dòng.
  • Khoảng trắng có thể mang ý nghĩa (Markdown, YAML, Python) hoặc vô hại (hầu hết code khác), nên hãy bật hoặc tắt tùy chọn bỏ qua khoảng trắng cho phù hợp.
  • Một diff trông nhỏ vẫn có thể ảnh hưởng rất lớn nếu nó đổi một giá trị, điều kiện, route, biến môi trường hay feature flag.
  • Khi hai khối lớn khác nhau nhiều, hãy sắp xếp hoặc chuẩn hóa chúng trước: so sánh hai đối tượng JSON chưa sắp xếp có thể tạo ra cả một bức tường khác biệt giả.

Cách so sánh hai văn bản từng bước

  1. Dán hai phiên bản

    Đặt văn bản gốc ở bên trái và phiên bản mới ở bên phải. Code, JSON, văn xuôi, tệp cấu hình, gì cũng được.

  2. Chọn diff theo dòng hoặc theo từ

    Dùng diff theo dòng cho mã nguồn hoặc dữ liệu có cấu trúc. Chuyển sang diff theo từ khi so sánh các đoạn văn, nơi cách dùng từ mới là điều quan trọng.

  3. Bật tắt khoảng trắng và phân biệt hoa thường

    Bật *bỏ qua khoảng trắng* nếu bạn chỉ quan tâm đến thay đổi có ý nghĩa; bật *bỏ qua hoa thường* khi so sánh log hoặc văn bản mà chữ hoa, chữ thường không quan trọng.

  4. Đọc kết quả có tô màu

    Nội dung bị xóa hiện màu đỏ ở bên trái; nội dung được thêm hiện màu xanh ở bên phải. Dòng bị sửa thường hiện thành một cặp, mỗi bên một dòng, đặt cạnh nhau.

  5. Chỉnh sửa và lặp lại

    Sửa bên nào cũng được và xem diff cập nhật trực tiếp. Cách này rất hợp để soạn một bản patch gọn gàng trước khi mở pull request.

Tra cứu nhanh màu sắc và ký hiệu diff

Các quy ước mà diff checker của Coddy dùng, cũng giống git diff, GitHub và hầu hết các trình xem diff khác.

Ký hiệuÝ nghĩaHiển thị ở đâu
Đỏ / -Dòng bị xóa khỏi bản gốcKhung bên trái
Xanh / +Dòng được thêm vào bản mớiKhung bên phải
Vàng / cả haiDòng bị sửa: thay đổi một phần bên trong dòngCả hai khung
Không màuDòng không đổi: giống nhau ở cả hai phiên bảnCả hai khung
@@ ... @@Tiêu đề hunk của git diff: số dòngKết quả git diff trong terminal
Diff theo từThay đổi ở mức ký tự hoặc từ bên trong một dòng bị sửaĐược tô sáng trong dòng màu vàng

Ví dụ diff để thử

Bắt lỗi gõ nhầm trong cấu hình

Trước
API_TIMEOUT=3000
Sau
API_TIMEOUT=30000

Thêm một số 0 biến timeout 3 giây thành 30 giây. Diff checker phát hiện điều này trong vài giây, còn nhìn bằng mắt hai tệp .env thì rất dễ bỏ sót.

Sửa ở mức từ

Trước

Vui lòng login để tiếp tục.

Sau

Vui lòng đăng nhập để tiếp tục.

Diff theo từ làm nổi bật "login" → "đăng nhập", giống như với câu tiếng Anh nó làm nổi bật login → log in. Diff theo dòng chỉ cho thấy cả dòng đã thay đổi; diff theo từ tách riêng đúng chỗ đã sửa.

So sánh hai response của API

Response A
{  "id": 42,  "status": "draft",  "published": false}
Response B
{  "id": 42,  "status": "published",  "published": true}

Diff cho thấy rõ hai trường liên quan đã thay đổi cùng nhau. Đây là cách nhanh nhất để xác nhận một lệnh gọi API thay đổi trạng thái đã làm đúng việc của nó.

So sánh hai phiên bản của một hàm

Trước
function total(items) {  let sum = 0;  for (const i of items) sum += i.price;  return sum;}
Sau
function total(items) {  return items.reduce((sum, i) => sum + i.price, 0);}

So sánh code online như thế này là cách nhanh nhất để review một lần refactor: diff theo dòng cho thấy vòng lặp kiểu mệnh lệnh đã bị xóa và phiên bản dùng reduce được thêm vào, nên bạn có thể xác nhận hành vi tương đương trước khi commit.

Đọc một git diff

git diff
@@ -1,4 +1,4 @@ function greet(name) {-  return 'Hi ' + name;+  return `Hi ${name}`; }

git diff cũng dùng logic màu như vậy: dòng bắt đầu bằng - (đỏ) bị xóa, + (xanh) được thêm, còn @@ ... @@ là tiêu đề hunk cho biết khoảng dòng. Dán nguyên kết quả git diff để đọc nó trong hai khung cạnh nhau có tô màu cú pháp.

Những lỗi thường gặp khi đọc diff

  • Bỏ qua khoảng trắng khi khoảng trắng có ý nghĩa: Markdown, YAML và Python đều phụ thuộc vào thụt lề.
  • Chỉ review các dòng xanh (được thêm) và bỏ sót những dòng đỏ (bị xóa) quan trọng.
  • Cho rằng diff gọn gàng chứng tỏ phiên bản mới là đúng. Diff chỉ cho thấy *cái gì đã thay đổi*, không cho biết *thay đổi đó có đúng không*.
  • So sánh JSON đã rút gọn với code đã định dạng mà không chuẩn hóa một trong hai trước: dòng nào cũng sẽ khác nhau dù dữ liệu giống hệt.
  • Tin vào diff hai khung cạnh nhau với tệp rất dài mà không tìm các từ khóa cụ thể. Hãy dùng cả hai cách: lướt qua trước, rồi Ctrl+F tìm trường bạn quan tâm.

Câu hỏi thường gặp về Diff Checker

Công cụ so sánh văn bản và diff checker khác nhau thế nào?

Không khác gì cả: đó là hai tên gọi của cùng một công cụ. Cả hai đều so sánh hai đoạn văn bản và làm nổi bật những gì được thêm, xóa hay sửa.

Có thể so sánh code bằng công cụ này không?

Có. Diff văn bản dùng được cho code, JSON, SQL, Markdown, YAML, tệp cấu hình và văn bản thường. Chế độ diff theo dòng đặc biệt hữu ích khi review mã nguồn.

Vì sao lập trình viên dùng diff hằng ngày?
Diff là nền tảng của review code, theo dõi thay đổi, truy tìm lỗi hồi quy và phân tích sau sự cố. git diff, màn hình pull request và khung so sánh trong IDE đều dựa trên cùng một ý tưởng.
Có nên bỏ qua khoảng trắng không?

Chỉ khi khoảng trắng không quan trọng với loại tệp đó. Trong Python, YAML và Markdown, khoảng trắng có ý nghĩa và cần được so sánh. Với hầu hết code khác, bỏ qua khoảng trắng giúp diff gọn hơn.

Dữ liệu của mình có an toàn trong diff checker này không?

Có. Việc so sánh chạy hoàn toàn trong trình duyệt. Văn bản của bạn không được tải lên hay lưu lại, nên bạn có thể yên tâm dùng với code nội bộ, cấu hình và dữ liệu mẫu của khách hàng.

Làm sao so sánh code online?

Dán hai phiên bản code vào khung bên trái và bên phải, công cụ sẽ làm nổi bật khác biệt ngay lập tức: dòng bị xóa màu đỏ, dòng được thêm màu xanh, và thay đổi ở mức từ bên trong các dòng bị sửa. Công cụ dùng được cho mọi ngôn ngữ (JavaScript, Python, Java, SQL, JSON, YAML) vì nó so sánh trực tiếp văn bản. Không cần tải lên, không cần đăng ký: việc so sánh chạy trong trình duyệt.

Code diff là gì?
Code diff là tập hợp các thay đổi giữa hai phiên bản của một tệp: dòng nào được thêm, bị xóa hay bị sửa. Đó là nền tảng của quản lý phiên bản: mọi commit, pull request và lần review code đều được đọc dưới dạng diff. Công cụ này cho bạn cùng góc nhìn thêm/xóa/sửa như git diff và GitHub, nhưng cho bất kỳ hai đoạn nào bạn dán vào, không cần repository.
Có xem được khác biệt giữa hai tệp không?

Được. Mở từng tệp, sao chép nội dung vào mỗi bên của phần so sánh, và diff sẽ làm nổi bật mọi dòng khác nhau. Dùng chế độ diff theo dòng cho code và dữ liệu có cấu trúc, và bật *bỏ qua khoảng trắng* nếu những thay đổi chỉ về định dạng gây nhiễu.

Tìm hiểu thêm

Công cụ lập trình khác

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu