Ad
DevToolXDevToolX

Diff 比較

比較兩段文字的差異,以顏色標示新增和刪除的行

關於 Diff 比較

這個工具以逐行方式比較兩段文字,用顏色標出新增、刪除和未變動的行,底層採用 Myers diff 演算法——和 Git 用的是同一套。無論是 config 檔兩個版本的差異、API 回應前後的變化,還是兩份文件草稿的修改,貼上去就能立刻看結果,資料不會離開瀏覽器。

常見使用情境

比對部署前後的 log 差異
把 release 前後的相關 log 貼進來,快速找出新出現的錯誤行或改變的 stack trace,不用逐行肉眼掃描。
確認 API response 的變化
把 staging 和 production 的 JSON 或 XML 回應各貼一份,立刻確認是否有 breaking change,或驗證修復是否生效。
不用 commit 就能比較兩份 config
把本地的 .env、nginx.conf 或 docker-compose.yml 和參考版本對比,不需要 git add 或另外執行 diff 指令。
比較文件的兩個版本
貼上規格書、信件或文件的兩份草稿,精確看出哪些句子新增、刪除或改寫了。

常見問題

Myers diff 演算法是什麼?

Myers diff(1986 年)是一個 O(ND) 的演算法,N 是兩段輸入的總長度,D 是編輯距離(最少需要幾次插入加刪除才能把一段文字變成另一段)。它是 Git、GNU diff 等主流工具的標準選擇,因為它能找出最短的編輯腳本,同時結果在直覺上最符合人類對「相似」的判斷。

行級、詞級、字元級 diff 有什麼差別?

行級 diff(預設)把每一行當成最小單位比較,適合程式碼和 config 檔。詞級 diff 先把行拆成單詞再比較,讓你在一長行裡看出單一欄位的改變。字元級是最細粒度的,最適合散文或短句,能看出一兩個字元的修改。

為什麼移動一段程式碼會顯示成刪除再新增,而不是「移動」?

標準 diff 演算法只追蹤插入和刪除,沒有「移動」的概念。一個 block 被移到別處,在 diff 眼裡和先刪掉再貼上完全一樣。要偵測移動需要額外的重命名偵測邏輯,Git 的 --find-renames 就是做這件事的。

git diff --word-diff 和這個工具有什麼不同?

git diff --word-diff 只對 Git 已判定為「有變化」的行,在行內以 [- -] 和 {+ +} 標記詞級差異,本質上和這個工具的詞級 diff 相同,只是它是先跑行級比較、再在有差異的行內細分。

什麼時候該用 3-way merge 或 patch 工具?

當你有兩個分支和共同的祖先版本,需要合併(3-way merge);或者你有一個 .patch 檔(由 git format-patch 或 diff -u 產生),需要把它應用到程式碼上(patch)。這個工具的 2-way diff 最適合臨時比對兩份文字,不適合用來套用變更。

相關工具