跳至内容
GitTree
Git 指南阅读 2 分钟

如何使用 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
下一次提交将包含什么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 忽略空格?

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 中的并排差异

  1. 打开差异

    在工作更改或任何提交中选择更改的文件。

  2. 选择视图

    在差异上方的 差异视图 下,选择 Hunk、Inline 或 Split。 分割并排显示之前和之后。

  3. 调整一下

    从命令选项板中,运行忽略差异中的空白、突出显示更改的单词或换行差异行。

  4. 比较两个分支

    运行 比较引用... 选择任意两个分支、标签或提交,并查看自合并基础或提示到提示以来的更改。

将差异切换到 GitTree 中的拆分视图:之前和之后,并排。
将差异切换到 GitTree 中的拆分视图:之前和之后,并排。GitTree 与演示存储库的接口。

有关每个选项,请参阅选择和使用差异视图 和比较引用。

常见问题

为什么 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日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。