人勤病就懒,人懒病就勤。——佚名
git diff
是 Git 提供的一个关键命令,用于查看不同版本或状态之间的代码差异。虽然命令行输出的格式中会显示类似 diff --git a/file.txt b/file.txt
的内容,这实际上并不是命令,而是差异输出的一部分。本文将详细介绍如何使用 git diff
命令查看和分析代码差异。
什么是 git diff
git diff
用于比较文件内容的变更。常见的使用场景包括:
- 查看工作区中的更改。
- 查看已暂存(
staged
)但未提交的内容。 - 比较分支之间、提交之间或标签之间的差异。
- 查看某个特定文件或路径的变更。
基本用法
1. 查看工作区中的未暂存更改
1 |
|
此命令会比较 工作区 和 暂存区 之间的差异。适用于查看修改了但尚未 git add
的文件。
输出示例:
1 |
|
解释:
diff --git a/file.txt b/file.txt
表示file.txt
文件的对比。@@ -0,0 +1,2 @@
显示变更发生的行号。+
表示新增的两行内容。
2. 查看已暂存但未提交的更改
1 |
|
--cached
用于比较 暂存区 和 最后一次提交 之间的差异。适合在执行了 git add
后但未提交时使用。
3. 查看工作区的所有更改(包括未暂存和已暂存)
1 |
|
HEAD
代表当前分支的最新提交,该命令会比较工作区和当前提交的所有差异。
高级用法
1. 比较两个分支的差异
1 |
|
适用于查看分支之间的具体差异,帮助开发者了解不同分支的代码改动。
示例:
1 |
|
会显示 feature
分支相对于 main
分支的所有代码差异。
2. 比较两个特定提交
1 |
|
替换 commit1
和 commit2
为具体的提交哈希值。例如:
1 |
|
输出显示这两个提交之间的代码变更。
3. 查看特定文件的差异
1 |
|
指定文件路径可以缩小比较范围。例如:
1 |
|
查看最近一次提交与当前提交在 src/app.js
文件中的差异。
常用选项
1. 显示变更文件列表
1 |
|
只显示发生变更的文件名,不显示具体的内容。例如:
1 |
|
2. 显示文件变更状态
1 |
|
输出包含文件的变更状态:
A
:新增M
:修改D
:删除
示例:
1 |
|
3. 显示统计信息
1 |
|
提供每个文件的修改统计信息,包括增加和删除的行数。例如:
1 |
|
4. 忽略空白字符差异
1 |
|
此选项忽略因空格或缩进导致的差异,仅显示内容改动。例如:
1 |
|
使用 -w
后,这样的改动会被忽略。
git diff
的输出结构
git diff
的输出可以分为以下几部分:
-
文件对比行
1
diff --git a/file.txt b/file.txt
表示比较
file.txt
文件。 -
索引信息
1
index e69de29..d95f3ad 100644
包括文件的哈希值和权限信息。
-
上下文范围
1
@@ -1,2 +1,3 @@
表示变更的上下文区域。
-1,2
是原文件的起始行和范围,+1,3
是新文件的起始行和范围。 -
具体改动
1
2- console.log("Old line");
+ console.log("New line");
使用场景总结
- 开发中: 在修改代码后但未暂存时,用
git diff
检查具体改动。 - 提交前: 使用
git diff --cached
确保暂存的更改符合预期。 - 代码审查: 使用
git diff branch1 branch2
比较分支间的变更,评估合并的影响。 - 问题排查: 使用
git diff commit1 commit2
找出具体提交导致的问题。
git diff
是一个灵活且高效的工具,无论是日常开发还是代码审查,都能帮助你快速了解代码变更,提高协作效率。通过掌握它的用法和选项,你可以更精准地管理代码变更,为项目保驾护航。