跳至内容
GitTree

课程 5 · 基础

暂存预期的快照并进行第一次提交

在 GitTree 内创建项目的自述文件和英雄页面,选择属于第一次提交的内容,并故意保留稍后的编辑未提交。证明记录的内容,而不是仅通过通知来判断成功。

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

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

英文旁白 · English and Arabic 字幕

打开视频页面在 YouTube 上观看

你将学到什么

  • 在 GitTree 中创建并保存前两个项目文件。
  • 暂存和取消暂存操作不会与删除工作文件混淆。
  • 在提交之前将索引与工作树进行比较。
  • 编写有用的摘要并仅提交准备好的快照。
  • 验证第一次提交的文件、身份和剩余的工作更改。

开始之前

从第 4 课结束的地方开始。 original gittree-features 是未出生的 main 上的普通存储库,没有提交、项目文件或遥控器。其本地身份是 GitTree Demo / demo@example.com。不要继续第 4 课的补充 gittree-features-copy。

GitTree 的检查最小值为 Git 2.39.0。该视频是在 Ubuntu 24.04 上使用 Git 2.52.0 和 GitTree 2.0 录制的:这两个文件、它们的暂存和第一次提交都是在应用程序本身中进行的,并且终端检查针对应用程序创建的内容或针对状态 A、B 和 C 中的项目的单独副本运行,因此从未重播原始文件。 macOS 或 Windows 上没有运行任何内容,并且 Ubuntu 是唯一记录的 Linux 系统; Command 键和 Windows 和弦来自键盘映射源。

Native Git 不需要帐户来进行本地提交。在 GitTree 中登录,免费计划涵盖本课程。不需要提供商、专业版/试用版、AI 起草、API 密钥、CI 运行程序或云环境。不要添加远程来进行本地提交。

概念:选择内容,然后记录它们

提交并不是“保存所有可见的内容”。在本课中,正常提交会记录 index:完整的选定快照。它创建一个根提交并指出它的要点。它不会推到任何地方。

保存在编辑器中会更新 working tree。暂存会更新所选工作文件的索引。取消暂存会更改索引选择;它不是“丢弃”,也不会删除我们练习中的工作文件。在第一次提交之前,没有早期提交的版本可供恢复,因此未暂存的新文件再次变为未跟踪。

准备好的版本是一个有用的类比:您可以在准备好版本后修改工作草案,然后在本地发布准备好的版本,而不包含较新的草稿。登台并不是对后续编辑的实时订阅。 Git 的添加参考 记录该选择; 提交引用 将普通索引提交与其他模式区分开来。

我们使用 no -a、显式提交路径参数、修改、空提交或自动全部阶段。索引是整个下一棵树的描述,而不仅仅是更改名称的列表。

状态工作索引.html索引index.html头/主要远程
A:保存初始文件HTML-01缺席未出生无
B:两个文件均已暂存HTML-01HTML-01未出生无
C:支持登台后编辑的线路HTML-01-工作中HTML-01未出生无
D:普通提交成功HTML-01-工作中HTML-01第一次提交包含 HTML-01无

README-01 也已上演并提交。 D之后,README就干净了; index.html 有意仅在工作树中保留修改状态。当状态不干净时,图表可以有新的提交。

完整的项目文件

使用 UTF-8、LF 和最后一个换行符。不要在保存的文件中包含 Markdown 栅栏。还没有 package.json、CSS、JS 或可运行的 Node 套件;这些内容在第 6 课中出现。

自述文件.md — 自述文件-01

文件摘录 · markdown
# GitTree Features

A fictional landing page used to learn Git and GitTree.

All people and addresses in this repository are fictional.
No form submits information to a server.

index.html — HTML-01,暂存之前

文件摘录 · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Understand every change.</h1>
      <p id="hero-copy">A clear view of Git history.</p>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>

index.html — HTML-01-WORKING,仅在登台后

将保存的工作文件替换为完整正文 after 早期版本已进入索引:

文件摘录 · html
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Understand every change.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>

唯一预期的替代品是英雄副本支持线。不要更改主标题或任何其他字节。

在GitTree

1.创建并保存两个初始文件

  1. 确认原始存储库的名称和主要上下文。打开 Command Palette…、Command+Shift+P / Ctrl+Shift+P,输入 New File… 并选择该命令 (files.newFile)。如果没有文件夹参数,它将从项目根目录开始。
  2. 在 New File 中,将 Path from the project folder 设置为 README.md,然后选择 Create。期望新的工作文件在文件工作区中打开。创造拒绝现有的道路,而不是覆盖它。
  3. 将焦点置于可编辑内容区域,粘贴完整的 README-01 正文,然后选择 Save。替代方案:当工作编辑器获得焦点时 Command+S / Ctrl+S。实际保存成功后,预计 Unsaved changes 指示器会清除。
  4. 重复New File…→路径index.html→Create。粘贴完整的 HTML-01,而不是稍后的工作变体。保存并等待未保存的指示器清除。
  5. 选择文件工具栏中的 Back to Graph,或调色板命令 Back to Graph (view.returnToGraph)。然后使用调色板 Show Working Changes (wip.show)。预计 Unstaged Files 下有 README.md 和 index.html,Staged Files 下没有任何内容。
  6. 请注意 Stage Changes to Commit,如果它是主创作者按钮,而没有任何内容上演。其源定义的操作阶段 all 工作更改;这并不意味着提交成功。我们使用故意的每个文件暂存。

保存编辑器缓冲区不是暂存。在选项卡中查看文件并不能证明其最新缓冲区已到达磁盘。

2. 安全地暂存、取消暂存,然后准备两个文件

  1. 对于 Unstaged Files 下的 README.md,请使用其 Stage File 行操作。键盘替代方案:仅选择该行,将焦点保持在未暂存列表中,然后按 S;调色板命令是 Stage (wip.stageSelected)。预计在 Staged Files 下有 README.md。
  2. 对于暂存文件下的 README 行,选择 Unstage File。键盘替代:仅选择它,将焦点保持在暂存列表中,然后按 U;调色板命令 Unstage (wip.unstageSelected)。期望 README.md 返回到 Unstaged Files。其工作内容保持不变。
  3. 再次暂存 README.md,然后使用其 Stage File 操作暂存 index.html。预计正好是 two 个暂存文件路径。
  4. 单击每个暂存行以检查其完整添加。 index.html 仍必须包含 A clear view of Git history. 不要单独从文件计数推断内容。

单字母快捷方式的范围仅限于其列表,而不是在编辑器或摘要中键入 S/U 的请求。假定不存在拖放暂存行为。

3. 保存稍后的编辑而不暂存它

  1. 打开Show Files (files.focus)、Command+Shift+E / Ctrl+Shift+E。将焦点置于文件树中的 index.html,然后按 Enter 打开其工作副本。替代方法:单击其现有的已保存工作文件选项卡。在可编辑的 File 视图中工作,而不是历史 blob 或暂存的差异。
  2. 将其全部内容替换为上面的 HTML-01-WORKING。通过 Save 或 Command/Ctrl+S 保存。等待实际磁盘保存成功。
  3. 通过 Back to Graph 返回,然后经过 Show Working Changes。 index.html 现在出现在 both 列表中。单击其“未暂存文件”行:差异显示后来的支持行替换。
  4. 单击其暂存文件行:首次提交的添加仍包含早期的支持行。请not为较新的工作编辑选择暂存文件,或立即Stage All Changes。这将改变您正在准备的提交。

4.写入消息并提交索引

  1. 在作曲家 Summary 字段(占位符 Commit summary)中,准确输入 feat: add the GitTree Features hero。将 Description 留空。这个摘要说明了发生了什么变化;它不承诺完成站点或通过测试套件。
  2. 保持 Amend Previous Commit 关闭。展开 Commit Options 并验证 Skip Hooks (--no-verify)、Add Signed-off-by、Different Author、Push After Commit 和 Allow Empty Commit 均已关闭。请勿添加共同作者或调用 AI 起草。
  3. 最后回顾一下两条分阶段的路线和之前准备好的英雄路线。选择Commit Changes to 2 Files。键盘替代:Command+Enter / Ctrl+Enter,仅在确认活动存储库和挂起状态后通过调色板命令 Commit (commit.submit) 路由。
  4. 等待Git的实际结果。成功的结果参考测量的 SHA;不要从图中复制伪造的 SHA。预计第一个图会在 main 上提交。在这种未更改的提交情况下,成功后消息草稿将被清除。
  5. 检查提交后列表:没有任何内容保留; index.html 保留在 Unstaged Files 下,后面一行。请not单击“阶段更改以提交”以“完成”此预期结果。

显示的文件计数是两个分段路径,而不是两个列表中的三行。 Push After Commit 是单独的后续选择;它已关闭并且没有遥控器。

在航站楼

在 <course-parent>/gittree-features 中运行,将占位符替换为您保留的实际父级。如果您已经执行了应用更改,inspect its resulting state;不要重播等效的突变并意外地超出检查点。

暂存之前保存的文件

Command · bash
git status --short

观察到:

输出
?? README.md
?? index.html

有意尝试没有暂存内容的正常提交:

Command · bash
git commit --quiet -m "feat: add the GitTree Features hero"

观察到退出 1 的标准输出,没有标准错误:

输出
On branch main

Initial commit

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	README.md
	index.html

nothing added to commit but untracked files present (use "git add" to track)

没有创建提交。这个负面案例解释了为什么选择文件很重要;不要使用空提交来绕过它。

本地阶段/非阶段等效项

在同一保存文件状态的单独重播中:

Command · bash
git add -- README.md
git rm --cached --quiet -- README.md

两个命令均无提示成功。 --cached 是必需的:它从索引 not the working file 中删除新条目。检查的自述文件字节保持不变,短状态再次显示两个未跟踪的文件。这是一个未提交的新文件示例;不要将其概括为删除跟踪的项目文件。

准备两者:

Command · bash
git add -- README.md index.html
git status --short
git diff --cached --stat

观察状态:

输出
A  README.md
A  index.html

观察总结:

输出
 README.md  |  6 ++++++
 index.html | 21 +++++++++++++++++++++
 2 files changed, 27 insertions(+)

统计摘要计算的是行数,而不是正确性。在提交之前查看实际的暂存内容。

保存稍后的工作编辑后

Command · bash
git status --short
git diff -- index.html

观察状态:

输出
A  README.md
AM index.html

观察到的工作差异:

输出
diff --git a/index.html b/index.html
index 5470374..27f8718 100644
--- a/index.html
+++ b/index.html
@@ -13,7 +13,7 @@
     <section class="hero" aria-labelledby="hero-title">
       <p class="eyebrow">GitTree Learn demo project</p>
       <h1 id="hero-title">Understand every change.</h1>
-      <p id="hero-copy">A clear view of Git history.</p>
+      <p id="hero-copy">Choose one change, then check what Git saved.</p>
     </section>
   </main>
   <footer><p>Built by a fictional team for GitTree Learn.</p></footer>

这些是根据确切的 LF 内容测量的文件 blob 缩写,而不是虚构的提交 SHA。短状态间距和缩写长度可能因格式配置而异;两次比较必须保持相同。

阅读准确准备的文件:

Command · bash
git show :index.html

完整观察到的输出:

输出
<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>GitTree Features — course demo</title>
</head>
<body>
  <header class="site-header">
    <a href="#main">GitTree Features</a>
  </header>
  <main id="main">
    <section class="hero" aria-labelledby="hero-title">
      <p class="eyebrow">GitTree Learn demo project</p>
      <h1 id="hero-title">Understand every change.</h1>
      <p id="hero-copy">A clear view of Git history.</p>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn.</p></footer>
</body>
</html>

提交并验证

仅在本机重播中,无需重新暂存稍后的编辑:

Command · bash
git commit --quiet -m "feat: add the GitTree Features hero"

观察到:没有输出,退出0。该装置没有有效的挂钩/签名,只有虚构的本地身份。不要禁用真实项目的挂钩/签名来强制教程成功。

检查本机或实际应用程序结果:

Command · bash
git log -1 --format="%s%n%an <%ae>%n%cn <%ce>"
git rev-list --count HEAD
git ls-tree --name-only HEAD
git status --short
git diff --cached
git remote

按前四个命令的顺序观察到的输出:

输出
feat: add the GitTree Features hero
GitTree Demo <demo@example.com>
GitTree Demo <demo@example.com>
1
README.md
index.html
 M index.html

最后两个命令各自生成 no output and exited 0。工作编辑仍然存在;不存在遥控器。这是本地首次提交,而不是上传。

对于独立内容确认,git show HEAD:index.html 返回了上面显示的完整 HTML-01 正文作为准备好的输出; git diff -- index.html 仍然显示准确的支撑线替换。两个路径的索引都与 HEAD 匹配。较新的文件没有丢失。

结果

在本课程结束时,要点是包含声明的摘要和虚构的作者/提交者的确切一次提交。 HEAD和索引包含README-01和HTML-01;工作index.html 包含HTML-01-WORKING。 Status 的前导空格为index.html,然后是M。没有遥控器。

在将此检查点交给第 6 课之前,请勿“清理”有意编辑、进行第二次提交、修改根目录或添加可选练习笔记本。任何后续的清理延续笔记本都属于单独保留的变体,而不是这个双文件首次提交。

常见错误

  • Saving without staging: 磁盘字节和选定的提交字节不同。
  • Staging again after the deliberate edit: 有效的 Git 行为,但较新的行将进入提交,从而更改本课的结果。
  • Counting all visible rows as staged files: 一条路径可以进行分阶段和非分阶段比较。
  • Using Stage All Changes as a final cleanup: 它将选择有意省略的编辑。
  • Enabling amend or automatic push: 这些是具有不同范围的不同操作。
  • Calling unstage Discard: unstage 编辑索引选择;丢弃可以删除工作内容。

如果出现问题

如果“新建文件”拒绝现有路径,请取消并检查它。不要覆盖未知内容。如果编辑器报告磁盘已更改,则保留两个版本并根据实际状态使用其 Review Changes、Reload from Disk 或 Keep Editing 控件;不要盲目选择Overwrite with My Edits。

如果提交因未暂存任何内容而被阻止,请选择所需的文件并查看它们。如果身份缺失,请检查第 4 课中的本地设置;失败的尝试可以提供带有显式存储库目标的 Set up your Git identity。它并不证明全局身份写入是合理的,并且保存身份并不意味着提交自动成功。

如果 Git 拒绝提交或挂钩失败,请阅读 Hook Output(如果有)。源定义的拒绝文本为 The commit was not created. Your message and staged changes are unchanged. 更正所述原因并在重试之前重新检查索引。不要仅仅为了制造绿色效果而勾选“跳过钩子”。在不确定结果后重新检查实际 HEAD,然后再次提交。

如果创建的提交包含意外内容,请停止并记录其真实 SHA、工作/索引状态和消息。不要立即修改、重置或单击“放弃”。现在更改配置不会更改已存储在该提交中的元数据。

检查你的理解情况

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

  1. 第 1 题,共 6 题

    您创建 index.html 并在编辑器中完成“保存”,而无需暂存它。储蓄建立了什么?

    选择一个答案。

  2. 第 2 题,共 6 题

    您暂存新的自述文件,然后在第一次提交之前将其取消暂存。哪些说法是正确的?

    选择每个适用的答案。

  3. 第 3 题,共 6 题
    必填

    两个文件均已暂存,然后保存 HTML-01-WORKING,无需重新暂存。普通commit后,哪个结果是正确的?

    选择一个答案。

  4. 第 4 题,共 6 题
    必填

    在单独的重播中,保存新版本后重新暂存 index.html,然后提交这两个文件。你预测什么?

    选择一个答案。

  5. 第 5 题,共 6 题

    两个文件未暂存,并且没有任何文件暂存。该按钮显示“阶段更改要提交”。它有什么作用?

    选择一个答案。

  6. 第 6 题,共 6 题
    必填

    使用指定的本机命令检查完整的原件,或者如果工具不可用,请阅读其完整的实际记录。哪些观察结果共同证明了结果?

    选择每个适用的答案。

0 个(共 6 个)正确

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

在此浏览器中检查。

练习

对已完成的原件使用文章的状态/内容查询。解释为什么一次提交和剩余的工作修改都是正确的。在阅读准备好的文件之前记录您的预测。

对于 separate disposable replay only,请在提交之前暂存稍后编辑的 index.html。预测新的线路被记录并且状态变得干净。请勿更改原始版本来执行此替代方案。如果尚不存在浏览器练习,请使用两个记录并解释不同的结果。

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

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

回顾

  • 保存更改工作文件;暂存为下一次普通提交选择内容。
  • 第一次提交记录索引并推进本地 main,而不进行推送。
  • 分别核实内容、身份和剩余工作;肮脏的结果可能是故意的。

术语表介绍

舞台 — Таний;取消舞台 — ?????????????????????????????????提交 — 详细信息;索引 — 索引;工作树 — ????????????未追踪 — 未追踪;作者 — বালা;提交者 — ?????丢弃的意思是“取消”,与“取消暂存”不同。

视频文字记录

视频的旁白,逐条提示。

显示成绩单
  1. 创建英雄,准备一个版本, 并证明你的第一次提交保存了什么。
  2. 从原始存储库开始 L004,不是它的补充克隆。
  3. 保存、暂存和提交 更改不同的快照。
  4. 通过创建第一个文件 GitTree 的新建文件命令。
  5. 将其命名为 README 点 em dee,位于项目根目录。
  6. 保存完整的虚构项目 README,而不是 Markdown 栅栏。
  7. 创建索引点 H T M L 在同一个存储库中。
  8. 拯救最初的英雄 有了这条支撑线。
  9. 打开工作更改以查看 都是新的、未跟踪的文件。
  10. 没有任何上演,这 按钮首先暂存所有更改。
  11. 终端确认两个 未跟踪的文件,不是两次提交。
  12. 普通的 commit 无法记录这些 在选择文件内容之前。
  13. 首先仅暂存自述文件。
  14. 再次取消暂存。已保存 工作文本保持不变。
  15. 取消暂存更改选择; 丢弃可以删除工作内容。
  16. 现在将两个预期文件一一暂存。
  17. S 和 U 快捷键在其各自的位置工作 聚焦列表,而不是文本字段内。
  18. 回顾上演的内容, 不仅仅是文件数量。
  19. 摘要计数行数;确实如此 不能证明这些线是正确的。
  20. 准备的版本是 依然是原来的英雄。
  21. 重新打开工作文件, 不是阶段性的比较。
  22. 保存后面的配套 行而不暂存它。
  23. 现在出现相同的路径 在两次比较中。
  24. 非阶段性比较显示 稍后针对索引进行编辑。
  25. 阶段性补充仍 包含较早的行。
  26. 直接读取索引 来证明所准备的东西。
  27. 无需再次上演,这支持 第一个提交将包含行?
  28. 写一个总结来描述 您实际添加的英雄。
  29. 保留修改和所有可选行为 关闭第一个本地提交。
  30. 提交两个阶段路径, 不是每个可见的行。
  31. 等待Git确认创建之前 将操作视为完成。
  32. Main 现在指向它的第一个本地提交。
  33. 稍后的工作编辑仍然存在 故意在提交之外。
  34. 确认主题、作者 和独立的提交者。
  35. 有一个提交包含 正是这两条路径。
  36. 空的缓存差异可以共存 进行工作修改。
  37. 录制文件较早;的 工作文件仍然有较新的行。
  38. 没有上传任何内容。这个 存储库仍然没有远程。
  39. 如果您先进行稍后的编辑, 准备好的版本发生变化。
  40. 该替代提交记录了 新的线路并留下干净的结果。
  41. 提交快捷方式是一种替代方法 提交,而不是第二个完成步骤。
  42. 如果 Git 拒绝,请检查其输出并 重试之前的暂存内容。
  43. 不要丢弃剩余的编辑 或者假设撤消覆盖了每个缓冲区。
  44. 你的检查点是一个精确的提交 加上一项深思熟虑的工作编辑。
  45. 检查录音内容、身份 和剩余的工作分开。
  46. 保存写入工作文件; 分期选择;提交记录。
  47. 保留以后的编辑。接下来,检查 diffs 并添加项目的工具。
  48. 从这个验证状态继续, 不是来自猜测的干净文件夹。