git diff
是 Git 中用于比较差异的核心命令,它能显示工作目录、暂存区(索引)和提交之间的文件变化。以下是其详细用法和常见场景:
基本用法
1. 工作目录 vs 暂存区
git diff
- 显示已修改但未暂存的变更(即工作目录与暂存区的差异)。
- 红色
-
表示删除的行,绿色+
表示新增的行。
2. 暂存区 vs 最新提交(HEAD)
git diff --staged # 或 git diff --cached
- 显示已暂存但未提交的变更(即暂存区与最后一次提交的差异)。
3. 工作目录 vs 最新提交(HEAD)
git diff HEAD
- 显示所有未提交的变更(包括未暂存 + 已暂存的变更)。
比较历史提交
1. 比较两个提交
git diff <commit1> <commit2>
- 比较两个提交的差异(例如
git diff abc123 def456
)。
2. 比较分支
git diff branch1..branch2 # 等价于 git diff branch1 branch2
- 比较两个分支最新提交的差异(例如
git diff main..feature
)。
3. 与祖先提交比较
git diff HEAD^ HEAD # 比较 HEAD 与其父提交
git diff HEAD~2 HEAD # 比较 HEAD 前第2个祖先与当前提交
高级用法
1. 比较特定文件
git diff -- <file-path> # 工作目录 vs 暂存区
git diff HEAD -- <file-path> # 工作目录 vs HEAD
git diff commit1 -- <file-path> # 指定提交的文件
2. 查看单词级差异(非整行)
git diff --word-diff
- 显示单词级修改(例如
The [-old-]{+new+} word
)。
3. 统计变更(不显示具体内容)
git diff --stat
- 输出简略统计(例如
file.txt | 2 +-
)。
4. 忽略空白字符变更
git diff -w # 忽略空格/制表符
git diff -b # 忽略行尾空格
常见场景示例
场景 | 命令 |
---|---|
查看未暂存的修改 | git diff |
查看已暂存的修改 | git diff --staged |
比较工作目录与 main 分支 | git diff main |
比较两次提交的 README.md | git diff abc123 def456 -- README.md |
查看最近两次提交的差异 | git diff HEAD~1 HEAD |
输出解读
diff --git a/file.txt b/file.txt # 比较的文件路径
index 789abcd..1234567 100644 # 文件哈希值与模式
--- a/file.txt # 修改前版本(a/)
+++ b/file.txt # 修改后版本(b/)
@@ -1,3 +1,3 @@ # 修改位置(旧文件第1行起3行 → 新文件第1行起3行)
Hello World
-This is old text. # 删除的行(红色)
+This is new text! # 新增的行(绿色)
End
注意事项
- 默认输出可能较长,可按
q
退出分页查看(如果配置了分页器)。 - 使用
git difftool
可用图形化工具(如 Beyond Compare)查看差异。