使用 TortoiseGit(小烏龜 Git) 時遇到 “文件內容沒改,但顯示為變更,提示有 n 行刪除、n 行添加”,你可以按照以下步驟操作來排查并解決問題:
? 一、定位問題根源(是否為行尾差異)
右鍵 → TortoiseGit → Diff
打開差異對比工具(TortoiseGit 默認用 TortoiseMerge)
如果:
每行都顯示紅色/綠色,但內容完全一樣
每行尾巴處出現小圓點(表示 \r\n ? \n 的差異)
那么基本可以確定是換行符不同(CRLF ? LF)。
🔧 二、根治方案:統一換行符策略
? 方案 A:用 .gitattributes 固定換行符(推薦)
適用于跨平臺協作(如:Windows + macOS 或 Linux)
在項目根目錄新建或修改 .gitattributes 文件,加入:
arduino
復制
編輯
- text=auto eol=lf
然后在項目目錄中:
右鍵空白處 → Git Bash Here
執行以下命令:
bash
復制
編輯
git add .gitattributes
git add --renormalize .
git commit -m “Normalize line endings”
此后 Git 會自動將所有行尾統一為 LF(推薦標準)。
? 方案 B:設置 Git 自動行尾轉換(Windows 上個人使用)
在資源管理器任意空白處右鍵 → TortoiseGit → Settings
左側導航選擇:Git → Config
在 “Global” 標簽頁下點擊 “Edit global .gitconfig”
添加以下內容(如果沒有):
ini
復制
編輯
[core]
autocrlf = true
含義是:Git 倉庫內統一使用 LF,工作區自動轉換為 CRLF(Windows 的默認行尾)
保存并關閉,重啟 TortoiseGit。
🧹 三、臨時跳過差異查看(不用解決,只是忽略顯示)
使用 TortoiseGit → Diff 時
點擊工具欄右上角的**“Options”**,然后勾選:
Ignore line endings(忽略換行符差異)
Ignore whitespace(忽略空格差異)
🚫 如果是可執行位差異(mode change 100644 ? 100755)
雖然你“沒改代碼”,Git 可能檢測到了可執行權限改變。
在 TortoiseGit 中不會直接顯示文件權限變化
你可以:
右鍵 → Git Bash Here
執行:
bash
復制
編輯
git diff --summary
如果看到:
復制
編輯
mode change 100644 => 100755
就是這個問題
解決方法:
bash
復制
編輯
git update-index --chmod=-x
? 總結(推薦做法)
類型 推薦做法
行尾換行符 .gitattributes + git add --renormalize .
個別機器配置 core.autocrlf = true
忽略查看差異 TortoiseGit Diff → Options → 勾選忽略換行符
最后無換行符 設置編輯器(VSCode、Notepad++)保存時自動加換行
如你愿意,我可以幫你生成 .gitattributes 文件內容,或者遠程一步步指導操作。你也可以把出現問題的 git diff 貼上來看一下具體是什么類型的“偽變更”。