跳至内容
GitTree

课程 8 · 日常工作

不用动头就能读历史

记录剩余的半径编辑,记录实际历史记录,并将修订集与文件树差异进行比较。选择图形行是检查,而不是分支切换。

进度已保存在此浏览器中。

播放时会加载来自 YouTube 的视频(隐私增强模式)。

英文旁白 · English and Arabic 字幕

打开视频页面在 YouTube 上观看

你将学到什么

  • 区分 HEAD、选定的提交、作者和提交者。
  • 追随父母和始父母祖先。
  • 读取两点/三点日志集,不要将它们与差异端点混淆。
  • 比较 GitTree 中的两个实际提交,而不重写历史记录。

开始之前

从第 7 课结束的地方开始:main 从第 5 课到第 7 课有 3 个提交。只有 CSS 半径保持修改:HEAD 和索引保存 CSS-02-INDEX,即工作文件 CSS-02-WORKING。没有遥控器。该视频是在 Ubuntu 24.04 上使用 Git 2.52.0 和 GitTree 2.0 录制的:两个提交、文档、图形检查、搜索、跳转到 HEAD 和比较引用均在应用程序中操作,并且终端检查针对应用程序创建的内容运行,因此显示的提交 ID 是应用程序比较的内容。分叉分支的情况是一个图表:没有创建任何功能分支。 macOS 或 Windows 上没有运行任何内容,并且 Ubuntu 是唯一记录的 Linux 系统。 GitTree 的源最小值为 Git 2.39.0;登录后,本地检查和提交都包含在免费计划中。

概念

提交记录树、元数据和父 ID。分支命名一次提交; HEAD 通常命名当前分支。单击另一个图表行会更改应用程序的 selection,而不是 HEAD、分支或磁盘文件。作者记录了作品的作者;提交者记录了记录此提交的人。他们在这里恰好是同一个虚构身份。

对于线性链,HEAD~1 遵循一个第一父边; HEAD~2 跟在 2 后面。 HEAD^1 是第一个父级; HEAD^2 表示 second parent of one commit,而不是“两次提交”。非合并提交没有第二个父级。

git log A..B 表示从 B 可达,不包括从 A 可达。git log A...B 表示可达性的对称差。 git diff A B 比较端点树,而 git diff A...B 比较 merge-base(A,B) 与 B。三点对数和三点差异不会提出相同的问题。在这个线性历史上,一些结果碰巧是一致的;不要将这种巧合推广到不同的分支。 修订符号,差异语义。

读取/选择/搜索不会更改索引、工作字节或引用。本课的两个显式提交确实移动了本地 main:首先是半径,其次是文档。没有远程更改。

完整的历史文件

首先提交现有的半径编辑,如下所示。然后使用完整的 UTF-8/LF 正文创建 docs/history.md;它的最后一项描述了将包含该文档的提交,而不是发明的 SHA。

文件摘录 · markdown
# GitTree Features history

The first-parent chain on main, oldest first:

1. feat: add the GitTree Features hero
2. feat: add styling and local project checks
3. feat: refine the hero and card spacing
4. style: finish the card radius change
5. docs: record logs-and-revisions practice

After this document is committed, HEAD names item 5.
HEAD~1 names item 4; HEAD~2 names item 3.
Selecting a graph row does not move HEAD.
These labels are descriptions, not fabricated commit SHAs.

All identities in this project are fictional.

不要将可选的练习笔记本或额外的清理提交添加到这个五提交链中。

在GitTree

  1. 调色板 Show Working Changes(Command/Ctrl+Shift+P 打开调色板)。单击 Unstaged Files 下的 styles.css。确认只剩下半径0.5rem → 0.75rem;不要重复之前的宽度更改。
  2. 选择其 Stage File 行操作,输入摘要 style: finish the card radius change,关闭普通选项,然后输入 Commit Changes to 1 File(或 Command/Ctrl+Enter 一次)。验证四个提交并清理跟踪状态。
  3. 调色板 New File… → Path from the project folder = docs/history.md → Create。粘贴完整文档和 Save。 Back to Graph → Show Working Changes → docs/history.md 的阶段文件。
  4. 摘要docs: record logs-and-revisions practice;提交一个文件。预期的链现在有五个提交。
  5. 单击根英雄行。在提交详细信息中检查其真实 SHA、主题、作者/提交者和 root commit 父状态。单击最新行;比较其父关系。不要仅仅为了读取它而调用 Check Out This Commit。
  6. 在提交详细信息中切换 View all files 以区分提交的整个树和仅更改的路径;检查文档的修订记录。这不会修改工作文件。
  7. 返回Back to Graph;使用调色板 Search Loaded History 或 Command/Ctrl+F while the graph is active,输入 radius 并检查匹配的加载历史记录。在编辑器中,相同的和弦会找到编辑器文本。之后清除搜索。加载历史记录搜索不是服务器范围的历史记录查询。
  8. 调色板 Jump to HEAD、Command/Ctrl+Shift+H,定位当前提示。选择/搜索可以移动,而本机 git symbolic-ref --short HEAD 仍报告主要内容。
  9. 使用原生 git rev-parse HEAD~2 获取其 real 提交 ID;不提供固定课程 SHA。调色板 Compare References… (repo.compareRefs) 打开 Compare References。在 Old side 中,粘贴测量的 ID 并选择其提交选项;在 New side 中,选择 HEAD。选择器接受提交 ID,而不是承诺解析任意修订表达式。
  10. 在 What to compare 下,选择 The two endpoints,然后选择 Compare。预计该链的 docs/history.md 和 styles.css 存在差异。重新打开/更改比较并选择具有相同边的 Changes since the merge base:线性祖先使端点结果在此重合。不要从该视图推断对称日志行为。 Cancel 退出而不更改历史记录。

在航站楼

本机突变替代方案,仅在相应应用程序成功之前:

Command · bash
git add -- styles.css
git commit --quiet -m "style: finish the card radius change"

两人都默默地成功了。保存完整文档后:

Command · bash
git add -- docs/history.md
git commit --quiet -m "docs: record logs-and-revisions practice"
git log --reverse --format=%s

完整观察链:

输出
feat: add the GitTree Features hero
feat: add styling and local project checks
feat: refine the hero and card spacing
style: finish the card radius change
docs: record logs-and-revisions practice

检查集与树:

Command · bash
git log --format=%s HEAD~2..HEAD
git log --format=%s HEAD~2...HEAD

每个查询单独打印:

输出
docs: record logs-and-revisions practice
style: finish the card radius change

它们之所以重合,只是因为较旧的端点是这里的祖先。

Command · bash
git diff --name-only HEAD~2 HEAD
git rev-list --count HEAD
git symbolic-ref --short HEAD

按顺序输出:

输出
docs/history.md
styles.css
5
main

这两个命名文件是树差异,而不是日志返回的两个提交的身份。

Command · bash
git rev-parse --verify --quiet HEAD^2

观察到没有 stdout/stderr 并退出 1:最新提交不是合并。请使用 HEAD~2 代替两个第一个父步骤。要识别真实的比较 ID:

Command · bash
git rev-parse HEAD~2

在排练期间读取其实际输出;测量的 SHA 随提交元数据而变化,并且不得从模型标签复制。

结果

在本课结束时:按照记录的顺序对 main 进行五次提交;跟踪工作/索引干净,没有远程或正在进行的操作。 CSS 现在的半径为 0.75rem,并且 docs/history.md 已提交。读取过去的图表行并未分离 HEAD。

常见错误

  • 将选定的行视为已签出提交:独立检查 HEAD。
  • 将 ^2 读为 ~2:第二个父边与两个第一个父边。
  • 将对称对数含义应用于三点差异:差异是从合并基到右侧的方向。
  • 假设图形搜索涵盖已卸载/未获取的历史记录。

如果出现问题

缺少修订可能意味着血统不足、拼写错误或边界浅薄,而不是腐败。验证链和选定的存储库。在提交消失之前清除应用程序过滤器。不要仅仅为了修复选择而从任意提供商获取、重置或签出。如果文档已存在,请在应用此新文件步骤之前检查其内容。

检查你的理解情况

回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。

  1. 第 1 题,共 6 题

    单击较旧的图表行会执行什么操作?

    选择一个答案。

  2. 第 2 题,共 6 题

    在这个五提交线性链上哪些陈述是正确的?

    选择每个适用的答案。

  3. 第 3 题,共 6 题
    必填

    History.md 提交后,HEAD~2..HEAD 中有哪些主题?

    选择一个答案。

  4. 第 4 题,共 6 题
    必填

    主要是H5;特征 F 源自 H3。 git log 的主要功能是什么?

    选择一个答案。

  5. 第 5 题,共 6 题

    git diff A...B 是否表示对称日志集?

    选择一个答案。

  6. 第 6 题,共 6 题
    必填

    哪些观察结果证明检查点已完成?

    选择每个适用的答案。

0 个(共 6 个)正确

正确回答所需的问题以完成课程。

在此浏览器中检查。

练习

选择较旧的行并证明 HEAD 保持主要状态。解释为什么两个日志条目只能对应两个路径中的差异。更改的输入:对于来自 H3 的一次提交的单独分支,而 main 位于 H5,预测 main..feature 仅包含该功能提交,但 main...feature 还包括 H4/H5。不要在规范检查点中创建该分支;使用一次性副本。

您自己的确认:该网站无法看到您的计算机。

要完成本课程,请正确回答所需的问题并确认实践练习。

回顾

  • Selection 和 HEAD 有不同的所有者。
  • 父符号和修订集描述祖先,而不是文件更改。
  • 比较真实解决的端点并清楚地标记问题。

术语表介绍

承诺 — ????????????家长 — ÍÀÀÀÀ 巴; ref—— 参考;修订 — 重新修订;范围——合并基地 — ģsר ف٠;作者 — বালা;提交者 — ?????

视频文字记录

视频的旁白,逐条提示。

显示成绩单
  1. 读历史无需 移动您当前的分支。
  2. 首先检查一个 L007留下的独立编辑。
  3. 将半径记录为其自己的本地提交。
  4. 使用编写记录链 主题,而不是发明的哈希值。
  5. 该文档成为 该链中的第五次提交。
  6. 请先核实实际订单 教学修订符号。
  7. 分支名称和选定的 图表行不同。
  8. 仅选择根 更改检查的提交。
  9. 完整的树不仅仅是 列表在该提交中发生了更改。
  10. 搜索加载的历史记录,不 承诺的服务器范围存档。
  11. 将选择返回到当前提示。
  12. 终端独立 确认已签出的分支。
  13. 两个父步骤不是 一次提交的第二个父项。
  14. 这个非合并提交 没有第二个父母。
  15. 这些集合在这里一致是因为 端点是祖先。
  16. 树差异命名文件, 不是一组提交身份。
  17. 使用测量的提交 ID 在比较选择器中。
  18. 比较两个已解决的问题 树而不改变参考。
  19. 该模式比较合并 与右侧底座。
  20. 发散图使得 两个日志范围不同。
  21. 三点对数和三点 diff 回答不同的问题。
  22. 错误的选择需要 导航,而不是破坏性恢复。
  23. 验证链并不变 分支前的 HEAD。
  24. 接下来,创建并切换 故意命名分支。