问题背景
git diff 默认以行为单位对比,两类常见痛点:
- 行尾空格噪音:格式化工具、编辑器自动去除行尾空格,导致 diff 输出大量无意义的空白变更,掩盖真实改动
- 长行改动难读:Markdown、文档、配置文件中一行很长,改了几个词却显示整行删除/新增,难以定位具体变化
--ignore-space-at-eol:忽略行尾空白
解决的问题
只忽略行尾的空白字符差异,保留行中间的空白变化。
适用场景:
- 编辑器/格式化工具自动去除行尾空格,产生大量无意义 diff
- 跨平台协作(Windows CRLF vs Unix LF 的行尾差异)
- 审查 Markdown/文档时过滤格式噪音
用法
git diff --ignore-space-at-eol
git diff --ignore-space-at-eol SKILL.md空白忽略选项对比
| 选项 | 别名 | 忽略范围 |
|---|---|---|
--ignore-space-at-eol | — | 仅行尾空白 |
-b | --ignore-space-change | 行尾空白 + 连续空白视为等价 |
-w | --ignore-all-space | 所有空白字符(包括行中间) |
--ignore-blank-lines | — | 忽略空行变化 |
推荐优先用
--ignore-space-at-eol,比-w更精准,不会误忽略有意义的缩进变化。
--word-diff:单词级差异
解决的问题
将 diff 粒度从”行”细化到”单词”,一行中只有几个词变化时,直接高亮变化的词,而不是显示整行删除/新增。
适用场景:
- Markdown、文档、注释的修改审查
- 配置文件中值的变更
- 长行代码中局部变量/字符串修改
- SKILL.md 等 prompt 文件的迭代对比
用法
git diff --word-diff SKILL.md
git diff --word-diff=color SKILL.md
git diff --word-diff=plain SKILL.md四种模式
| 模式 | 命令 | 输出格式 | 适用场景 |
|---|---|---|---|
plain(默认) | --word-diff | [-removed-] {+added+} | 终端无色彩时,文本标记清晰 |
color | --word-diff=color | 颜色高亮,无标记符号 | 支持颜色的终端,最直观 |
porcelain | --word-diff=porcelain | 脚本友好的行格式,~ 表示换行 | 脚本解析、自动化处理 |
none | --word-diff=none | 禁用 word diff | 取消之前的 word-diff 设置 |
示例输出(plain 模式)
原文:The quick brown fox
改后:The fast brown fox
The [-quick-]{+fast+} brown fox
自定义单词分隔符
默认以空格分词,可用 --word-diff-regex 自定义:
# 以非字母数字字符分词(适合代码)
git diff --word-diff --word-diff-regex='[^[:space:]]+'
# 以字符为单位对比(最细粒度)
git diff --word-diff --word-diff-regex='.'组合使用
# 忽略行尾空白 + 单词级对比(文档审查最佳组合)
git diff --ignore-space-at-eol --word-diff SKILL.md
# 彩色单词级对比
git diff --word-diff=color --ignore-space-at-eol SKILL.md持久化配置
# 全局默认开启 word-diff
git config --global diff.wordRegex '[^[:space:]]+'
# 对特定文件类型启用(.gitattributes)
*.md diff=markdown相关页面
- claude-code-permissions — Claude Code 权限配置
- git-worktree — Git 多工作目录管理