使用 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 贴上来看一下具体是什么类型的“伪变更”。