课程 8 · 日常工作
不用动头就能读历史
记录剩余的半径编辑,记录实际历史记录,并将修订集与文件树差异进行比较。选择图形行是检查,而不是分支切换。
- 级别: 初学者
- 阅读 3 分钟
- 4 分钟的视频
- 已更新
- 在这节课之前: 暂存预期的快照并进行第一次提交, 提交选定的块,而不是整个文件
进度已保存在此浏览器中。
播放时会加载来自 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。
# 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
- 调色板 Show Working Changes(Command/Ctrl+Shift+P 打开调色板)。单击 Unstaged Files 下的 styles.css。确认只剩下半径0.5rem → 0.75rem;不要重复之前的宽度更改。
- 选择其 Stage File 行操作,输入摘要
style: finish the card radius change,关闭普通选项,然后输入 Commit Changes to 1 File(或 Command/Ctrl+Enter 一次)。验证四个提交并清理跟踪状态。 - 调色板 New File… → Path from the project folder = docs/history.md → Create。粘贴完整文档和 Save。 Back to Graph → Show Working Changes → docs/history.md 的阶段文件。
- 摘要
docs: record logs-and-revisions practice;提交一个文件。预期的链现在有五个提交。 - 单击根英雄行。在提交详细信息中检查其真实 SHA、主题、作者/提交者和 root commit 父状态。单击最新行;比较其父关系。不要仅仅为了读取它而调用 Check Out This Commit。
- 在提交详细信息中切换 View all files 以区分提交的整个树和仅更改的路径;检查文档的修订记录。这不会修改工作文件。
- 返回Back to Graph;使用调色板 Search Loaded History 或 Command/Ctrl+F while the graph is active,输入
radius并检查匹配的加载历史记录。在编辑器中,相同的和弦会找到编辑器文本。之后清除搜索。加载历史记录搜索不是服务器范围的历史记录查询。 - 调色板 Jump to HEAD、Command/Ctrl+Shift+H,定位当前提示。选择/搜索可以移动,而本机
git symbolic-ref --short HEAD仍报告主要内容。 - 使用原生
git rev-parse HEAD~2获取其 real 提交 ID;不提供固定课程 SHA。调色板 Compare References… (repo.compareRefs) 打开 Compare References。在 Old side 中,粘贴测量的 ID 并选择其提交选项;在 New side 中,选择 HEAD。选择器接受提交 ID,而不是承诺解析任意修订表达式。 - 在 What to compare 下,选择 The two endpoints,然后选择 Compare。预计该链的 docs/history.md 和 styles.css 存在差异。重新打开/更改比较并选择具有相同边的 Changes since the merge base:线性祖先使端点结果在此重合。不要从该视图推断对称日志行为。 Cancel 退出而不更改历史记录。
在航站楼
本机突变替代方案,仅在相应应用程序成功之前:
git add -- styles.css
git commit --quiet -m "style: finish the card radius change"两人都默默地成功了。保存完整文档后:
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检查集与树:
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它们之所以重合,只是因为较旧的端点是这里的祖先。
git diff --name-only HEAD~2 HEAD
git rev-list --count HEAD
git symbolic-ref --short HEAD按顺序输出:
docs/history.md
styles.css
5
main这两个命名文件是树差异,而不是日志返回的两个提交的身份。
git rev-parse --verify --quiet HEAD^2观察到没有 stdout/stderr 并退出 1:最新提交不是合并。请使用 HEAD~2 代替两个第一个父步骤。要识别真实的比较 ID:
git rev-parse HEAD~2在排练期间读取其实际输出;测量的 SHA 随提交元数据而变化,并且不得从模型标签复制。
结果
在本课结束时:按照记录的顺序对 main 进行五次提交;跟踪工作/索引干净,没有远程或正在进行的操作。 CSS 现在的半径为 0.75rem,并且 docs/history.md 已提交。读取过去的图表行并未分离 HEAD。
常见错误
- 将选定的行视为已签出提交:独立检查 HEAD。
- 将 ^2 读为 ~2:第二个父边与两个第一个父边。
- 将对称对数含义应用于三点差异:差异是从合并基到右侧的方向。
- 假设图形搜索涵盖已卸载/未获取的历史记录。
如果出现问题
缺少修订可能意味着血统不足、拼写错误或边界浅薄,而不是腐败。验证链和选定的存储库。在提交消失之前清除应用程序过滤器。不要仅仅为了修复选择而从任意提供商获取、重置或签出。如果文档已存在,请在应用此新文件步骤之前检查其内容。
检查你的理解情况
回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。
0 个(共 6 个)正确
正确回答所需的问题以完成课程。
在此浏览器中检查。
练习
选择较旧的行并证明 HEAD 保持主要状态。解释为什么两个日志条目只能对应两个路径中的差异。更改的输入:对于来自 H3 的一次提交的单独分支,而 main 位于 H5,预测 main..feature 仅包含该功能提交,但 main...feature 还包括 H4/H5。不要在规范检查点中创建该分支;使用一次性副本。
您自己的确认:该网站无法看到您的计算机。
要完成本课程,请正确回答所需的问题并确认实践练习。
回顾
- Selection 和 HEAD 有不同的所有者。
- 父符号和修订集描述祖先,而不是文件更改。
- 比较真实解决的端点并清楚地标记问题。
有关的
术语表介绍
承诺 — ????????????家长 — ÍÀÀÀÀ 巴; ref—— 参考;修订 — 重新修订;范围——合并基地 — ģsר ف٠;作者 — বালা;提交者 — ?????
视频文字记录
视频的旁白,逐条提示。
显示成绩单
- 读历史无需 移动您当前的分支。
- 首先检查一个 L007留下的独立编辑。
- 将半径记录为其自己的本地提交。
- 使用编写记录链 主题,而不是发明的哈希值。
- 该文档成为 该链中的第五次提交。
- 请先核实实际订单 教学修订符号。
- 分支名称和选定的 图表行不同。
- 仅选择根 更改检查的提交。
- 完整的树不仅仅是 列表在该提交中发生了更改。
- 搜索加载的历史记录,不 承诺的服务器范围存档。
- 将选择返回到当前提示。
- 终端独立 确认已签出的分支。
- 两个父步骤不是 一次提交的第二个父项。
- 这个非合并提交 没有第二个父母。
- 这些集合在这里一致是因为 端点是祖先。
- 树差异命名文件, 不是一组提交身份。
- 使用测量的提交 ID 在比较选择器中。
- 比较两个已解决的问题 树而不改变参考。
- 该模式比较合并 与右侧底座。
- 发散图使得 两个日志范围不同。
- 三点对数和三点 diff 回答不同的问题。
- 错误的选择需要 导航,而不是破坏性恢复。
- 验证链并不变 分支前的 HEAD。
- 接下来,创建并切换 故意命名分支。