人勤病就懒,人懒病就勤。——佚名
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 是一个灵活且高效的工具,无论是日常开发还是代码审查,都能帮助你快速了解代码变更,提高协作效率。通过掌握它的用法和选项,你可以更精准地管理代码变更,为项目保驾护航。