添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
LabEx

Git 历史与日志管理

Git Git Beginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

欢迎来到 Git 时间旅行之旅!今天,我们将踏上一段激动人心的旅程,探索你的 Git 项目历史。Git 最强大的功能之一就是它能够跟踪和展示项目的演变历史。这段历史不仅仅是对过去事件的记录,更是一个理解、调试和改进项目的强大工具。

在本实验中,我们将探索 git log 命令,它是你进入 Git 历史记录的窗口。我们将从基本用法开始,然后深入探讨更高级的技巧,比如格式化日志输出、按日期过滤日志、搜索特定更改,甚至从项目历史中生成统计数据。

通过本实验的学习,你将能够像专业人士一样浏览项目的历史,提取有价值的见解和信息,从而成为一名更高效的开发者。无论你是追踪 bug、审查更改,还是仅仅想了解项目的演变过程,这里学到的技能都将是无价之宝。

让我们踏入 Git 时间机器,探索过去吧!

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("`Git`")) -.-> git/SetupandConfigGroup(["`Setup and Config`"]) git(("`Git`")) -.-> git/BranchManagementGroup(["`Branch Management`"]) git(("`Git`")) -.-> git/BasicOperationsGroup(["`Basic Operations`"]) git/SetupandConfigGroup -.-> git/init("`Initialize Repo`") git/BranchManagementGroup -.-> git/log("`Show Commits`") git/BranchManagementGroup -.-> git/shortlog("`Condensed Logs`") git/BasicOperationsGroup -.-> git/commit("`Create Commit`") subgraph Lab Skills git/init -.-> lab-387490{{"`Git 历史与日志管理`"}} git/log -.-> lab-387490{{"`Git 历史与日志管理`"}} git/shortlog -.-> lab-387490{{"`Git 历史与日志管理`"}} git/commit -.-> lab-387490{{"`Git 历史与日志管理`"}} end

设置你的工作区

在深入探索 Git 的历史功能之前,我们先设置一个包含一些提交历史的工作区。我们将创建一个新目录,初始化一个 Git 仓库,并添加一些提交。

打开你的终端并输入以下命令:

cd ~/project
mkdir git-history-lab
cd git-history-lab
git init

现在,让我们创建一些文件并提交一系列更改,复制并粘贴以下命令:

echo "## Git History Lab" > README.md
git add README.md
git commit -m "Initial commit"
echo "function hello() {" > script.js
echo "  console.log('Hello, Git!');" >> script.js
echo "}" >> script.js
git add script.js
git commit -m "Add hello function"
echo "function goodbye() {" >> script.js
echo "  console.log('Goodbye, Git!');" >> script.js
echo "}" >> script.js
git add script.js
git commit -m "Add goodbye function"
echo "This is a test file" > test.txt
git add test.txt
git commit -m "Add test file"
echo "hello();" >> script.js
echo "goodbye();" >> script.js
git add script.js
git commit -m "Call hello and goodbye functions"

让我们分解一下刚刚的操作:

  • 我们创建了一个 README 文件并进行了初始提交。
  • 我们创建了一个包含 "hello" 函数的 JavaScript 文件并提交了它。
  • 我们在同一个文件中添加了一个 "goodbye" 函数并提交了它。
  • 我们添加了一个测试文件并提交了它。
  • 最后,我们修改了脚本以调用这两个函数并提交了更改。
  • 现在,我们有了一个包含一些历史记录的仓库,可以开始探索了!

    基本日志用法

    现在我们有了一些提交历史,让我们来探索 git log 的基本用法。

    要查看项目的提交历史,只需运行:

    git log

    你应该会看到类似以下的输出:

    commit 1234567890abcdef1234567890abcdef12345678 (HEAD -> main)
    Author: Your Name <[email protected]>
    Date:   Mon Jun 5 10:00:00 2023 +0000
        Call hello and goodbye functions
    commit 2345678901abcdef2345678901abcdef23456789
    Author: Your Name <[email protected]>
    Date:   Mon Jun 5 09:45:00 2023 +0000
        Add test file
    

    日志中的每个条目显示:

  • 完整的提交哈希(提交的唯一标识符)
  • 提交的作者
  • 提交的日期和时间
  • 默认情况下,git log 会显示所有提交,从最近的提交开始。它会以倒序时间顺序(最新的在前)显示这些提交。

    如果输出内容较长,Git 会使用分页器(通常是 less)显示。你可以使用方向键导航,按 q 退出。

    要查看更简洁的日志版本,可以使用:

    git log --oneline

    这会将每个提交显示为一行,仅包含简短的提交哈希和提交信息。

    记住,git log 是你查看项目历史的窗口。它是了解项目发生了哪些更改、何时更改以及由谁更改的绝佳起点。

    格式化日志输出

    Git 提供了强大的选项来格式化日志输出,以显示你所需的确切信息。让我们来探索其中一些选项。

    要显示每次提交中修改的文件,可以使用 --stat 选项:

    git log --stat

    这将显示每次提交中哪些文件被更改,以及添加或删除了多少行。

    要查看更详细的更改信息,可以使用 -p 选项:

    git log -p

    这会显示每次提交的实际补丁(添加和删除的行)。这对于详细审查更改非常有用。

    你还可以使用 --pretty 选项创建自定义格式。例如:

    git log --pretty=format:"%h - %an, %ar : %s"

    这将显示:

  • %h :简短的提交哈希
  • %an :作者名称
  • %ar :相对作者日期
  • %s :主题(提交信息)
  • 你可以自定义这个格式字符串,以包含你需要的任何信息。以下是一些有用的占位符:

  • %H :完整的提交哈希
  • %ad :作者日期
  • %cn :提交者名称
  • %ce :提交者邮箱
  • %cd :提交者日期
  • 尝试不同的格式,找到最适合你的方式!

    按日期过滤日志

    通常,你可能希望查看特定时间范围内的提交。Git 提供了多种选项来按日期过滤日志。

    要查看过去一周的提交,可以使用:

    git log --since=1.week

    你也可以使用具体的日期:

    git log --after="2023-06-01" --before="2023-06-30"

    这将显示 2023 年 6 月 1 日至 6 月 30 日之间的提交。

    Git 支持多种日期格式,包括相对格式,例如 "yesterday"(昨天)、"1 month 2 weeks 3 days ago"(1 个月 2 周 3 天前)等。

    你也可以使用 --until 选项代替 --before ,而 --after --since 是同义词。

    记住,这些过滤器显示的是提交日期在指定范围内的提交。提交日期是提交创建的时间,可能与实际更改的时间不同。

    如果你正在调查某个特定更改的引入时间,你可能需要使用 --grep 选项来搜索特定的提交信息,我们将在下一步中介绍这一点。

    搜索日志以查找特定更改

    Git 提供了强大的搜索功能,帮助你查找特定的提交。让我们来探索其中一些功能。

    要搜索提交信息中包含特定单词的提交,可以使用:

    git log --grep="function"

    这将显示所有提交信息中包含单词 "function" 的提交。

    你也可以搜索对特定文件的更改:

    git log -- script.js

    这将显示所有影响 script.js 文件的提交。

    要搜索添加或删除特定代码行的更改,可以使用:

    git log -S "console.log"

    这被称为 "pickaxe" 搜索。它会显示 "console.log" 出现次数发生变化的提交。

    你可以将这些选项与其他选项结合使用。例如,查看过去一周对 script.js 文件的详细更改:

    git log -p --since=1.week -- script.js

    记住,Git 的搜索默认是区分大小写的。使用 -i 选项可以进行不区分大小写的搜索:

    git log --grep="function" -i

    当你试图追踪某个特定更改的引入时间或某个 bug 的修复时间时,这些搜索功能非常有用。

    从日志生成统计信息

    Git 可以通过统计信息为你提供项目历史的宝贵洞察。让我们来探索一些生成这些统计信息的方法。

    要查看按作者分类的提交数量摘要,可以使用:

    git shortlog -s -n

    这将显示作者列表,按提交数量排序,并在每个名字旁边显示提交次数。

    要查看每个作者添加和删除了多少行代码,可以使用:

    git log --author="Jane Doe" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "Added lines: %s, Removed lines: %s, Total lines: %s\n", add, subs, loc }'

    将 "Jane Doe" 替换为你想要检查的作者名称。

    要查看哪些文件被修改得最多,可以使用:

    git log --pretty=format: --name-only | sort | uniq -c | sort -rg | head -10

    这将显示被修改次数最多的前 10 个文件。

    要查看提交的总数,可以使用:

    git rev-list --count HEAD

    这些统计信息对于理解项目的整体开发模式非常有用。它们可以帮助识别项目中哪些部分最活跃地被开发,谁是最活跃的贡献者,以及项目随时间的发展情况。

    记住,虽然这些统计信息可以提供有用的洞察,但它们并不能说明全部情况。提交次数或代码行数的变化并不一定与贡献的影响或质量直接相关。

    恭喜你,Git 历史学家!你已经解锁了 Git 历史和日志管理功能的强大能力。让我们回顾一下我们涵盖的关键概念:

  • 基本日志用法 :你学会了如何使用 git log 查看项目的提交历史。
  • 格式化日志输出 :你发现了如何自定义日志输出,以显示你所需的确切信息。
  • 按日期过滤日志 :你学会了如何专注于特定时间范围内的提交。
  • 搜索日志以查找特定更改 :你掌握了强大的技术,可以查找特定更改的引入时间。
  • 从日志生成统计信息 :你探索了提取项目开发模式洞察的方法。
  •