你手上有同一份東西的兩個版本——改前改後的文件、兩份設定檔、同事重寫過的段落——需要知道「到底改了哪裡」。兩邊並排慢慢讀又慢又容易漏。**diff(差異比對)**一秒就搞定。
diff 到底做什麼
diff 演算法會找出「把一段文字變成另一段」所需的最少新增與刪除,再用顏色標出來:綠色是新增、紅色是刪除、無色是沒變。這就是「追蹤修訂」和所有 code review 背後的同一套技術。
行比對 vs 字比對
有兩種好用的粒度:
- 行比對以整行為單位。最適合程式碼、設定檔、CSV 與清單——這些的「改動」通常是整行被新增、刪除或替換。
- 字比對逐字比。最適合文章散文——你會想看到一句話裡只有「某一個字」變了,而不是整行紅綠一片。
先用行比對;當某行顯示有變、你卻看不出差在哪,再切到字比對。
怎麼讀結果
- 一紅一綠相鄰 = 那行被編輯了(先刪掉、再以新樣子加回)。
- 單獨一綠 = 新增。
- 單獨一紅 = 刪除。
- 下方摘要(例如
+3 −1)讓你一眼看出改動規模。
為什麼在瀏覽器本機比
diff 常牽涉敏感內容——合約、設定檔裡的密鑰、還沒發布的文案。用會上傳的線上工具是多餘的風險。文字比對工具全程在你的瀏覽器本機比對:兩個版本都不離開你的裝置。
第三種粒度:字元比對
遇到很短又密集的字串,連字比對都嫌粗。字元比對逐字元比,適合「差在一個字元就是全部關鍵」的場合——訂單編號裡對調的數字、雜湊值或 API 金鑰裡一個錯字元、藏在長 token 裡的一個手誤。字比對會把整個 token 標成有變,字元比對則直接指到差的那個字元。
口訣:檔案與清單用行比對,文章散文用字比對,代碼與識別碼用字元比對。
什麼時候會用到 diff
- 審閱修改——看清同事、編輯,或 AI 改寫到底動了你草稿的哪裡。
- 比對版本——合約、條款、設定檔改動前後的差別。
- 驗證複本——確認兩份匯出、兩份翻譯、兩份清單是不是逐字元一致。
- 追近似重複——兩段看起來一樣、結果卻不同的文字。
常見誤解
- diff 不會辨識「搬移」——把一段剪下貼到下面,多數工具會顯示成「一刪一增」,而不是「移動」。
- 整行被標色不代表整行都改了——行比對模式下,只改一個字也會把整行標起來,切到字比對或字元比對才看得到真正的改動。
- 看不見的字元也算數——兩行看起來一樣,可能只差一個行尾空白、一個 Tab 或一種換行符;那是真的差異,不是工具出錯,也正是移除換行與重複行指南裡整理步驟要預防的。
小技巧:先整理格式,diff 更乾淨
如果兩份檔案只差在行尾空白、Tab 或換行符,diff 會很雜。先把兩份都用文字清理器跑一遍——去頭尾空白、統一空白——真正的差異就會突顯出來。