人勤病就懒,人懒病就勤。——佚名
git diff
是 Git 提供的一个关键命令,用于查看不同版本或状态之间的代码差异。虽然命令行输出的格式中会显示类似 diff --git a/file.txt b/file.txt
的内容,这实际上并不是命令,而是差异输出的一部分。本文将详细介绍如何使用 git diff
命令查看和分析代码差异。
git diff
git diff
用于比较文件内容的变更。常见的使用场景包括:
staged
)但未提交的内容。1 | git diff |
---|
此命令会比较 工作区 和 暂存区 之间的差异。适用于查看修改了但尚未 git add
的文件。
输出示例:
1234567 | diff --git a/file.txt b/file.txtindex e69de29..d95f3ad 100644--- a/file.txt+++ b/file.txt@@ -0,0 +1,2 @@+Hello, World!+Welcome to Git. |
---|
解释:
diff --git a/file.txt b/file.txt
表示 file.txt
文件的对比。@@ -0,0 +1,2 @@
显示变更发生的行号。+
表示新增的两行内容。1 | git diff --cached |
---|
--cached
用于比较 暂存区 和 最后一次提交 之间的差异。适合在执行了 git add
后但未提交时使用。
1 | git diff HEAD |
---|
HEAD
代表当前分支的最新提交,该命令会比较工作区和当前提交的所有差异。
1 | git diff branch1 branch2 |
---|
适用于查看分支之间的具体差异,帮助开发者了解不同分支的代码改动。
示例:
1 | git diff main feature |
---|
会显示 feature
分支相对于 main
分支的所有代码差异。
1 | git diff commit1 commit2 |
---|
替换 commit1
和 commit2
为具体的提交哈希值。例如:
1 | git diff abc123 def456 |
---|
输出显示这两个提交之间的代码变更。
1 | git diff [commit1] [commit2] -- path/to/file |
---|
指定文件路径可以缩小比较范围。例如:
1 | git diff HEAD~1 HEAD -- src/app.js |
---|
查看最近一次提交与当前提交在 src/app.js
文件中的差异。
1 | git diff --name-only |
---|
只显示发生变更的文件名,不显示具体的内容。例如:
12 | src/file1.jssrc/file2.js |
---|
1 | git diff --name-status |
---|
输出包含文件的变更状态:
A
:新增M
:修改D
:删除示例:
123 | A src/new_file.jsM src/modified_file.jsD src/deleted_file.js |
---|
1 | git diff --stat |
---|
提供每个文件的修改统计信息,包括增加和删除的行数。例如:
123 | src/file1.js | 5 +++--src/file2.js | 8 ++++++--2 files changed, 10 insertions(+), 3 deletions(-) |
---|
1 | git diff -w |
---|
此选项忽略因空格或缩进导致的差异,仅显示内容改动。例如:
12 | - function test( ) {+ function test() { |
---|
使用 -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
是新文件的起始行和范围。
具体改动
12 | - console.log("Old line");+ console.log("New line"); |
---|
git diff
检查具体改动。git diff --cached
确保暂存的更改符合预期。git diff branch1 branch2
比较分支间的变更,评估合并的影响。git diff commit1 commit2
找出具体提交导致的问题。git diff
是一个灵活且高效的工具,无论是日常开发还是代码审查,都能帮助你快速了解代码变更,提高协作效率。通过掌握它的用法和选项,你可以更精准地管理代码变更,为项目保驾护航。