Git 中文手册

git diff 查看代码差异的常用姿势

2026-09-06 约 3 分钟阅读

改了什么想看清楚?git diff 显示代码差异。本文讲清 diff 的工作区/暂存区/提交对比、看单个文件、分支间差异,以及怎么让 diff 更易读。

场景:想确认自己到底改了哪些行、或对比两个分支差了什么。git diff 是查看代码差异的主力工具。难点在于"比较的到底是哪两个对象",下面讲清。

diff 比较的三种对象

Git 里有三个"快照层":工作区(未 add)暂存区(已 add)提交(commit)。diff 比较它们之间任意两者:

命令比较内容
git diff工作区 vs 暂存区(未 add 的改动
git diff --staged暂存区 vs 上次提交(已 add 的改动
git diff HEAD工作区 vs 上次提交(全部改动)
git diff 提交A 提交B两个提交之间

新手误区:默认 git diff 看不到已 git add 的改动,要加 --staged 才看得到。

常用命令

# 工作区未 add 的改动
git diff

# 已 add 的改动
git diff --staged        # 或 --cached

# 看某个文件
git diff -- 文件.js
git diff --staged -- 文件.js

# 只显示改动统计(不改内容)
git diff --stat

对比分支/提交

git diff main feature        # 两分支全部差异
git diff main feature -- src/ # 只看某目录差异
git diff abc1234 def5678     # 两提交差异

让 diff 更好读

# 忽略空白差异
git diff -w

# 上下文行数
git diff -U3

# 按词高亮
git diff --word-diff

配合 IDE/工具看更直观

命令行 git diff 用 +/- 显示。若觉得难读,可用:

git diff --color=always | less -R   # 终端高亮分页
git diff --color-words              # 逐词高亮

图形界面(VSCode/IDE)的 Diff 视图更直观,适合对比复杂改动。

常见问题

  • diff 没输出但明明改了:可能改动已被 git add,用 git diff --staged 看。
  • diff 显示整个文件都变了:可能是换行符(CRLF/LF)差异,用 git diff -w 忽略后确认。
  • 只想看谁改的:用 git blame 而非 diff。

一句话速记

git diff 看未 add 的、--staged 看已 add 的、加两个分支名对比分支;加 -- 文件 只看单文件。

?

常见问题 FAQ

git diff 默认比较的是哪两个?
默认比较"工作区 vs 暂存区"(也就是你还没 add 的改动)。已 add 的改动要用 git diff --staged 查看。
git diff --staged 和 git diff 区别?
--staged(或 --cached)比较的是"暂存区 vs 上次提交",即已经 git add 过的改动;不带参数的 diff 看的是未 add 的工作区改动。
怎么对比两个分支的差异?
git diff 分支A 分支B 比较两者所有差异;git diff main...feature 只看 feature 相对 main 独有的改动(三点的合并基点)。
只想看某个文件改了啥?
git diff -- 文件路径 只看该文件的改动。也可配合其他命令如 git diff main -- 目录。