本章目录:
1. 命令简介
git whatchanged
是一个 Git 命令,用于查看 Git 仓库中的提交历史及其具体变动内容。它展示了某一提交所引入的更改,通常包括了每次提交修改的文件以及相关的内容差异。这个命令是查看仓库历史时非常有用的工具,尤其适合审计提交历史或追溯特定提交的变动。
git whatchanged
实际上是 git log
的一种变体,它专注于显示每个提交所做的变动,而不仅仅是提交的元数据(如作者、日期等)。如果你需要快速查看文件的增删改动以及每个提交的详细变更,git whatchanged
是一个非常高效的工具。
2. 命令的基本语法和用法
基本语法
git whatchanged [<options>] [<commit-range>]
<options>
:用于调整命令输出的格式和过滤方式。<commit-range>
:指定需要查看的提交范围,支持类似于git log
的提交范围格式。
常见使用场景
示例 1:查看整个仓库的提交历史及变动
git whatchanged
该命令将列出仓库中的所有提交,并显示每个提交修改了哪些文件以及具体的变动内容。
示例 2:查看特定范围内的提交变动
git whatchanged HEAD~5..HEAD
此命令将显示最近 5 次提交的变动内容。HEAD~5..HEAD
表示从当前 HEAD
的前 5 次提交到 HEAD
的所有提交历史。
示例 3:查看某个文件的历史变动
git whatchanged <file-path>
通过指定文件路径,可以查看该文件的所有变动历史。例如:
git whatchanged src/main.c
此命令将列出 src/main.c
文件的所有历史变动。
3. 命令的常用选项及参数
git whatchanged
提供了一些常用的选项,以帮助用户更灵活地控制输出内容。以下是一些常用选项:
常用选项:
-
-p
或--patch
:显示每次提交的具体差异(即具体修改的代码块)。示例:
git whatchanged -p
输出将包括每次提交的更改内容,类似于
git diff
的输出。 -
--stat
:仅显示修改文件的统计信息,而不显示具体的代码差异。示例:
git whatchanged --stat
这种方式将列出每个提交修改的文件以及每个文件的增加/删除行数。
-
--name-only
:仅列出每个提交修改的文件名。示例:
git whatchanged --name-only
这种输出仅会列出文件名,不显示任何具体的更改内容。
-
--abbrev-commit
:显示简短的提交哈希值(默认情况下,git whatchanged
会显示完整的提交哈希)。示例:
git whatchanged --abbrev-commit
输出会显示提交的简短哈希,例如
e7b6e2c
,而不是完整的哈希e7b6e2c9fbd6e0f431120f50a7b86531972f95b1
。 -
--pretty=format:"<string>"
:自定义输出格式。可以用来改变提交历史的显示方式。示例:
git whatchanged --pretty=format:"%h %an %s"
这会将每个提交显示为
提交哈希 提交者 姓名 提交信息
的格式。 -
-n <limit>
:限制输出的提交数。示例:
git whatchanged -n 10
该命令将只显示最近 10 次提交的变动历史。
4. 命令的执行示例
示例 1:查看所有提交的变动
git whatchanged
输出:
commit e7b6e2c9fbd6e0f431120f50a7b86531972f95b1
Author: John Doe <johndoe@example.com>
Date: Mon Mar 22 14:35:42 2021 -0400
Fix bug in the login feature
diff --git a/src/login.py b/src/login.py
index 05a634d..f47c1d1 100644
--- a/src/login.py
+++ b/src/login.py
@@ -20,6 +20,8 @@ def login():
pass
commit 9a7a7d92cd9d5c3c4fd92862f3a30e6b5be8c0e1
Author: Jane Smith <janesmith@example.com>
Date: Mon Mar 22 13:30:21 2021 -0400
Add authentication feature
diff --git a/src/auth.py b/src/auth.py
index a4b8b8d..98d9a7f 100644
--- a/src/auth.py
+++ b/src/auth.py
@@ -15,7 +15,7 @@ def authenticate():
pass
解释:
- 输出中包括了每个提交的哈希、提交者信息、日期和提交说明。
diff
部分展示了每个提交修改的文件和具体更改的代码。
示例 2:查看最近 5 次提交的变动
git whatchanged HEAD~5..HEAD
输出:
commit a6c9e2d39d50b1bce31deea3d5a5d88f1b6fe43d
Author: John Doe <johndoe@example.com>
Date: Mon Mar 22 14:00:00 2021 -0400
Fix typo in README
commit 9a7a7d92cd9d5c3c4fd92862f3a30e6b5be8c0e1
Author: Jane Smith <janesmith@example.com>
Date: Mon Mar 22 13:30:21 2021 -0400
Add authentication feature
解释:
- 该命令展示了从当前
HEAD
开始到 5 次提交的变动信息,帮助开发者追踪近期的代码变动。
5. 命令的进阶用法
进阶用法 1:查看特定文件的历史变动
git whatchanged --stat src/login.py
该命令只会显示 src/login.py
文件的变动统计信息,适用于查看单一文件的修改历史。
进阶用法 2:自定义输出格式
git whatchanged --pretty=format:"%h %an %s" -n 5
该命令会显示最近 5 次提交的简洁格式(提交哈希、作者和提交信息)。
6. 命令的常见问题与解答
问题 1:为什么 git whatchanged
无法显示更改内容?
解答:
git whatchanged
默认情况下显示提交历史的摘要信息。如果你需要查看具体的更改内容,需要加上 -p
或 --patch
选项,例如:
git whatchanged -p
问题 2:如何查看某个提交的详细内容?
解答:
要查看某个特定提交的详细内容,可以结合 git show
命令来使用:
git show <commit-hash>
问题 3:如何查看一个特定时间段内的提交?
解答:
可以使用提交范围来指定查看的时间段。例如:
git whatchanged --since="2021-03-01" --until="2021-03-22"
这将展示从 2021 年 3 月 1 日到 2021 年 3 月 22 日的所有提交。
7. 总结与建议
git whatchanged
是一个非常强大的工具,帮助开发者查看提交历史和变动。通过此命令,开发者能够快速了解文件的修改记录和内容变动,是调试和审计代码历史的利器。
最佳实践建议:
- 使用
-p
查看具体变动:对于追踪每个提交具体修改的代码,-p
选项非常有用。 - 结合
--stat
查看统计信息:如果只是需要查看文件的修改统计,而不是代码