git diff 是 Git 中用于比较文件差异的命令,帮助开发者了解代码变更情况。本章将详细介绍 git diff 的使用方式,包括基本命令格式、提交范围的对比、路径限制,以及与 SVN 生成 diff 的方式对比。


9.1 git diff 命令的格式

git diff 用于比较 Git 仓库中文件的不同版本。其基本语法如下:

  1. git diff [options] [<commit> [<commit>]] [--] [<path>...]

常见的 git diff 语法示例:

  1. 比较工作区暂存区的差异:

    1. git diff
  2. 比较暂存区最新提交(HEAD)的差异:

    1. git diff --cached
  3. 比较工作区最新提交(HEAD)的差异(包括已暂存的更改):

    1. git diff HEAD
  4. 比较两个提交之间的差异:

    1. git diff <commit1> <commit2>
  5. 仅比较某个文件的变更:

    1. git diff HEAD -- file.txt

9.2 简单的 git diff 例子

9.2.1 未提交的更改

修改 file.txt 文件后,可以使用 git diff 查看变更:

  1. git diff

示例输出:

  1. diff --git a/file.txt b/file.txt
  2. index 4f6a3f2..e6a1c4b 100644
  3. --- a/file.txt
  4. +++ b/file.txt
  5. @@ -1,3 +1,3 @@
  6. -Hello, World!
  7. +Hello, Git!

- 代表原来的内容,+ 代表修改后的内容。

9.2.2 已暂存但未提交的更改

  1. git add file.txt
  2. git diff --cached

9.3 git diff 和提交范围

9.3.1 比较某个提交与当前版本的差异

  1. git diff <commit>

示例:

  1. git diff a1b2c3d

9.3.2 比较两个提交之间的差异

  1. git diff <commit1> <commit2>

示例:

  1. git diff a1b2c3d f4e5g6h

9.3.3 仅查看某个文件在两个提交之间的变更

  1. git diff a1b2c3d f4e5g6h -- file.txt

9.4 路径限制的 git diff

如果只想比较某些文件或目录,可以在 git diff 之后指定路径:

9.4.1 比较某个文件的变更

  1. git diff HEAD -- src/main.c

9.4.2 仅比较某个目录

  1. git diff HEAD -- src/

9.5 比较 SVN 和 Git 如何产生 diff

在 SVN(Subversion)中,diff 的使用方式类似,但 Git 提供了更强大的功能。

9.5.1 SVN 生成 diff

  1. svn diff

比较两个修订版本的差异:

  1. svn diff -r 100:200

9.5.2 Git 生成 diff

  1. git diff <commit1> <commit2>

Git 与 SVN 的 diff 主要区别:

  1. 版本管理方式:Git 是分布式的,SVN 需要连接服务器才能比较修订版本。
  2. 性能:Git diff 速度更快,因为所有数据都存储在本地。
  3. 功能丰富度:Git diff 提供更强大的选项,如 --cached--stat--shortstat 等。

结论

本章介绍了 git diff 的基本格式、简单用法、提交范围对比、路径限制的 diff 以及 Git 和 SVN 在 diff 生成上的区别。掌握 git diff 能够帮助开发者快速理解代码变更,提高代码审查和协作的效率。