git diff
是 Git 中用于比较文件差异的命令,帮助开发者了解代码变更情况。本章将详细介绍 git diff
的使用方式,包括基本命令格式、提交范围的对比、路径限制,以及与 SVN 生成 diff 的方式对比。
9.1 git diff 命令的格式
git diff
用于比较 Git 仓库中文件的不同版本。其基本语法如下:
git diff [options] [<commit> [<commit>]] [--] [<path>...]
常见的 git diff
语法示例:
比较工作区与暂存区的差异:
git diff
比较暂存区与最新提交(HEAD)的差异:
git diff --cached
比较工作区与最新提交(HEAD)的差异(包括已暂存的更改):
git diff HEAD
比较两个提交之间的差异:
git diff <commit1> <commit2>
仅比较某个文件的变更:
git diff HEAD -- file.txt
9.2 简单的 git diff 例子
9.2.1 未提交的更改
修改 file.txt
文件后,可以使用 git diff
查看变更:
git diff
示例输出:
diff --git a/file.txt b/file.txt
index 4f6a3f2..e6a1c4b 100644
--- a/file.txt
+++ b/file.txt
@@ -1,3 +1,3 @@
-Hello, World!
+Hello, Git!
-
代表原来的内容,+
代表修改后的内容。
9.2.2 已暂存但未提交的更改
git add file.txt
git diff --cached
9.3 git diff 和提交范围
9.3.1 比较某个提交与当前版本的差异
git diff <commit>
示例:
git diff a1b2c3d
9.3.2 比较两个提交之间的差异
git diff <commit1> <commit2>
示例:
git diff a1b2c3d f4e5g6h
9.3.3 仅查看某个文件在两个提交之间的变更
git diff a1b2c3d f4e5g6h -- file.txt
9.4 路径限制的 git diff
如果只想比较某些文件或目录,可以在 git diff
之后指定路径:
9.4.1 比较某个文件的变更
git diff HEAD -- src/main.c
9.4.2 仅比较某个目录
git diff HEAD -- src/
9.5 比较 SVN 和 Git 如何产生 diff
在 SVN(Subversion)中,diff 的使用方式类似,但 Git 提供了更强大的功能。
9.5.1 SVN 生成 diff
svn diff
比较两个修订版本的差异:
svn diff -r 100:200
9.5.2 Git 生成 diff
git diff <commit1> <commit2>
Git 与 SVN 的 diff 主要区别:
- 版本管理方式:Git 是分布式的,SVN 需要连接服务器才能比较修订版本。
- 性能:Git diff 速度更快,因为所有数据都存储在本地。
- 功能丰富度:Git diff 提供更强大的选项,如
--cached
、--stat
、--shortstat
等。
结论
本章介绍了 git diff
的基本格式、简单用法、提交范围对比、路径限制的 diff 以及 Git 和 SVN 在 diff 生成上的区别。掌握 git diff
能够帮助开发者快速理解代码变更,提高代码审查和协作的效率。