跳到主要內容

← 返回部落格

如何比對兩段文字,一眼看出改了哪裡

你手上有同一份東西的兩個版本——改前改後的文件、兩份設定檔、同事重寫過的段落——需要知道「到底改了哪裡」。兩邊並排慢慢讀又慢又容易漏。**diff(差異比對)**一秒就搞定。

diff 到底做什麼

diff 演算法會找出「把一段文字變成另一段」所需的最少新增與刪除,再用顏色標出來:綠色是新增、紅色是刪除、無色是沒變。這就是「追蹤修訂」和所有 code review 背後的同一套技術。

行比對 vs 字比對

有兩種好用的粒度:

  • 行比對以整行為單位。最適合程式碼、設定檔、CSV 與清單——這些的「改動」通常是整行被新增、刪除或替換。
  • 字比對逐字比。最適合文章散文——你會想看到一句話裡只有「某一個字」變了,而不是整行紅綠一片。

先用行比對;當某行顯示有變、你卻看不出差在哪,再切到字比對。

怎麼讀結果

  • 一紅一綠相鄰 = 那行被編輯了(先刪掉、再以新樣子加回)。
  • 單獨一綠 = 新增
  • 單獨一紅 = 刪除
  • 下方摘要(例如 +3 −1)讓你一眼看出改動規模。

為什麼在瀏覽器本機比

diff 常牽涉敏感內容——合約、設定檔裡的密鑰、還沒發布的文案。用會上傳的線上工具是多餘的風險。文字比對工具全程在你的瀏覽器本機比對:兩個版本都不離開你的裝置。

第三種粒度:字元比對

遇到很短又密集的字串,連字比對都嫌粗。字元比對逐字元比,適合「差在一個字元就是全部關鍵」的場合——訂單編號裡對調的數字、雜湊值或 API 金鑰裡一個錯字元、藏在長 token 裡的一個手誤。字比對會把整個 token 標成有變,字元比對則直接指到差的那個字元。

口訣:檔案與清單用行比對,文章散文用字比對,代碼與識別碼用字元比對。

什麼時候會用到 diff

  • 審閱修改——看清同事、編輯,或 AI 改寫到底動了你草稿的哪裡。
  • 比對版本——合約、條款、設定檔改動前後的差別。
  • 驗證複本——確認兩份匯出、兩份翻譯、兩份清單是不是逐字元一致。
  • 追近似重複——兩段看起來一樣、結果卻不同的文字。

常見誤解

  • diff 不會辨識「搬移」——把一段剪下貼到下面,多數工具會顯示成「一刪一增」,而不是「移動」。
  • 整行被標色不代表整行都改了——行比對模式下,只改一個字也會把整行標起來,切到字比對或字元比對才看得到真正的改動。
  • 看不見的字元也算數——兩行看起來一樣,可能只差一個行尾空白、一個 Tab 或一種換行符;那是真的差異,不是工具出錯,也正是移除換行與重複行指南裡整理步驟要預防的。

小技巧:先整理格式,diff 更乾淨

如果兩份檔案只差在行尾空白、Tab 或換行符,diff 會很雜。先把兩份都用文字清理器跑一遍——去頭尾空白、統一空白——真正的差異就會突顯出來。