Git - 查看修改
Git - 查看修改和历史
Section titled “Git - 查看修改和历史”理解项目的历史以及随着时间推移所做的修改至关重要。Git 提供了多种命令来检查提交、比较版本和查看修改。
使用 git log 查看提交历史
Section titled “使用 git log 查看提交历史”git log 命令按时间顺序显示当前分支的提交列表。每个条目通常显示提交的 SHA-1 哈希值、作者、日期和提交消息。
[jerry@dev-machine project]$ git log这将产生类似于以下的输出:
commit d1e19d316224cddc437e3ed34ec3c931ad803958 (HEAD -> main, origin/main)Author: Jerry Mouse <jerry@example.com>Date: Wed Sep 11 08:15:30 2024 +0000
Changed return type of my_strlen to size_t
commit cbe1249b140dad24b2c35b15cc7e26a6f02d2277Author: Jerry Mouse <jerry@example.com>Date: Wed Sep 11 08:05:26 2024 +0000
Implemented my_strlen function
commit 19ae20683fc460db7d127cf201a1429523b0e319Author: Tom Cat <tom@example.com>Date: Wed Sep 11 07:32:56 2024 +0000
Initial commitgit log 有许多用于自定义其输出的有用选项:
--oneline: 在单行上显示每个提交(SHA-1 前缀和消息)。
[jerry@dev-machine project]$ git log --onelined1e19d3 (HEAD -> main, origin/main) Changed return type of my_strlen to size_tcbe1249 Implemented my_strlen function19ae206 Initial commit-n <count>或-<count>: 限制显示的提交数量(例如,git log -2)。--graph: 显示分支和合并历史的 ASCII 艺术图。--decorate: 在提交旁边显示分支和标签名称。--author="<pattern>": 显示特定作者的提交。--grep="<pattern>": 显示提交消息匹配特定模式的提交。--since="<date>"或--until="<date>": 按日期过滤提交。-- <file_path>: 显示影响特定文件或路径的提交。
使用 git show 查看提交详情
Section titled “使用 git show 查看提交详情”要查看特定提交的详细信息,包括其元数据以及它引入的修改(diff),请使用 git show <commit-SHA>。
[jerry@dev-machine project]$ git show cbe1249b这将输出:
commit cbe1249b140dad24b2c35b15cc7e26a6f02d2277Author: Jerry Mouse <jerry@example.com>Date: Wed Sep 11 08:05:26 2024 +0000
Implemented my_strlen function
diff --git a/string_utils.c b/string_utils.cnew file mode 100644index 0000000..187afb9--- /dev/null+++ b/string_utils.c@@ -0,0 +1,12 @@+#include <stdio.h>++int my_strlen(const char *s)+{+ const char *p = s;+ while (*p)+ ++p;+ return (p - s);+}+// ... more of the file if it's new ...+如果你省略 <commit-SHA>,git show 会显示最新提交(HEAD)的详细信息。
使用 git diff 比较修改
Section titled “使用 git diff 比较修改”git diff 用于显示提交之间的修改、提交与工作区之间的修改,或者暂存区与工作区之间的修改等。以 + 开头的行表示新增,以 - 开头的行表示删除。
- 工作区中尚未暂存的修改:
[jerry@dev-machine project]$ git diff这会将你的工作区文件与暂存区进行比较。
- 已暂存但尚未提交的修改:
[jerry@dev-machine project]$ git diff --staged# 或者 git diff --cached这会将暂存区与最后一次提交(HEAD)进行比较。
- 自最后一次提交以来所有的修改(已暂存和未暂存):
[jerry@dev-machine project]$ git diff HEAD- 两个提交之间的修改:
[jerry@dev-machine project]$ git diff <commit-SHA1> <commit-SHA2>例如,要查看提交 cbe1249b 和 d1e19d31 之间的修改:
[jerry@dev-machine project]$ git diff cbe1249b d1e19d31这可能会输出:
diff --git a/string_utils.c b/string_utils.cindex 187afb9..7da2992 100644--- a/string_utils.c+++ b/string_utils.c@@ -1,11 +1,12 @@ #include <stdio.h>
-int my_strlen(const char *s)+size_t my_strlen(const char *s) // 将 int 修改为 size_t { const char *p = s; while (*p) ++p; return (p - s); }-+// 用于测试的示例用法 int main(void) { const char *test_strings[] = {"hello", "world", ""}; for (int i = 0; i < 3; ++i) {- printf("Length of '%s' = %d\n", test_strings[i], my_strlen(test_strings[i]));+ printf("Length of '%s' = %zu\n", test_strings[i], my_strlen(test_strings[i])); // 将 %d 修改为 %zu } return 0; }定期查看修改和历史有助于理解项目的演变、调试问题以及有效地协作。