如何使用 git diff:提交、分支、文件和并排
一个命令可以比较您的工作文件夹、暂存区域、提交、分支和标签。以下是每种形式使用哪种形式,为什么两个点和三个点不同,以及如何获得真正的并排差异。
撰写者 Kodmora
GitTree 背后的软件公司
- 提交历史
- 分支
- 提交
在此页面上
不带参数的`git diff` 显示您尚未暂存的更改。 `git diff --staged` 显示下一次提交将包含的内容,而 `git diff main feature` 比较两个分支。 将 -- path/to/file 添加到任何表单以将其限制为一个文件。 Git 本身在终端中没有并排视图。为此,您需要 git difftool 或 Git GUI。
我需要哪个 git diff 命令?
| 你想看 | 命令 |
|---|---|
| 变更尚未暂存 | git diff |
| 下一次提交将包含什么 | git diff --staged |
| 自上次提交以来的所有内容 | git diff HEAD |
| 两次提交 | git diff <a> <b> |
| 两条分支,尖对尖 | git diff main feature |
| 分枝后增加了什么 | git diff main...feature |
| 两个标签 | git diff v1.0 v2.0 |
| 一个文件 | git diff -- src/search.ts |
如何读取 git diff 输出?
diff --git a/src/search.ts b/src/search.ts
index 4e1f2a0..9b3c7d1 100644
--- a/src/search.ts
+++ b/src/search.ts
@@ -12,7 +12,7 @@ export function search(query: string) {
const terms = tokenize(query);
- return index.find(terms, { limit: 20 });
+ return index.find(terms, { limit: 50 });
}---和+++分别命名文件的旧版本和新版本。@@ -12,7 +12,7 @@是一个大块头:每个版本中第 12 行起 7 行。- 以
-开头的行被删除,以+开头的行被添加,其余的是上下文。
阅读差异课程 逐步练习这一点。
如何区分两个提交?
# any two commits, older first
git diff 3e52f10 7c1d9ab
# the last commit against the one before it
git diff HEAD~1 HEAD
# one commit against its parent, with the message
git show 7c1d9ab如何区分两个分支?
# the tips of both branches
git diff main feature
# only what feature added since it left main
git diff main...feature
# a remote branch
git fetch origin
git diff main origin/main如何比较一个文件?
# working copy against the last commit
git diff HEAD -- src/search.ts
# the same file on two branches
git diff main feature -- src/search.ts
# a file at two commits
git diff HEAD~3 HEAD -- src/search.ts
# two files outside any repository
git diff --no-index old.txt new.txt如何让 git diff 忽略空格?
| 选项 | 它忽略了什么 |
|---|---|
-w 或 --ignore-all-space | 所有空白,包括重新缩进的行 |
-b 或 --ignore-space-change | 空白数量的变化 |
--ignore-space-at-eol | 行尾有空格 |
--ignore-blank-lines | 添加或删除空行 |
这些仅影响差异显示的内容。他们不会改变所暂存或提交的内容。当重新缩进使整个文件看起来发生变化时,需要使用 -w。
如何仅列出已更改的文件?
# names only
git diff --name-only main...feature
# names with A, M, D or R
git diff --name-status main...feature
# lines added and removed per file
git diff --stat main...feature我如何查看哪些单词发生了变化?
git diff --word-diff
git diff --color-words单词差异有助于处理长行,例如 Markdown 段落,其中一个更改的单词会将整行标记为已更改。
如何获得并排差异?
普通的 git diff 打印单列并且没有并排选项。您可以通过三种方式获取两列:将 git difftool 指向 diff 程序、安装终端分页器(例如 delta)或使用 Git GUI。
# pick a tool once
git config --global diff.tool vimdiff
# open each changed file in it
git difftool main...feature
# skip the prompt for each file
git difftool -y如何读取 GitTree 中的并排差异
打开差异
在工作更改或任何提交中选择更改的文件。
选择视图
在差异上方的 差异视图 下,选择 Hunk、Inline 或 Split。 分割并排显示之前和之后。
调整一下
从命令选项板中,运行忽略差异中的空白、突出显示更改的单词或换行差异行。
比较两个分支
运行 比较引用... 选择任意两个分支、标签或提交,并查看自合并基础或提示到提示以来的更改。

常见问题
为什么 git diff 没有显示任何内容?
您的更改可能是暂存的。 git diff 将工作文件夹与暂存区域进行比较,因此运行 git diff --staged 或 git diff HEAD。新的未跟踪文件在您添加之前永远不会出现。
git diff 和 git status 有什么区别?
git status 列出了哪些文件已更改。 git diff 显示其中已更改的行。
如何将我的分支与主分支进行比较?
运行 git diff main...HEAD 以仅查看您分支的工作。首先获取并使用 origin/main 与最新的远程版本进行比较。
git diff --cached 与 --staged 相同吗?
是的。它们是同一选项的两个名称。
如何将差异保存到文件中?
运行git diff > changes.patch。您可以稍后应用该文件,如如何创建和应用补丁 中所示。
来源
有关其他产品的声明已根据其位于 2026年11月7日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。
