跳至内容
GitTree

课程 16 · 日常工作

更正本地提交消息或内容

更正一个私人英雄提交中的拼写错误和消息,同时保留其旧提示。了解为什么修改会取代身份,以及为什么必须排除不相关的上演内容。

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

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

英文旁白 · English and Arabic 字幕

打开视频页面在 YouTube 上观看

你将学到什么

  • 检查被替换的提交。
  • 将修改的内容与仅消息编辑分开。
  • 保留旧的承诺小费。
  • 验证新身份和未更改的父级。

开始之前

从第 15 课结果的单独副本开始,在分支场景/修改中。完整的 HEADING_DRAFT 页面被提交为 fix: hedaing;工作树是干净的并且提交未发布。救援/修改前的名称与草稿提示完全相同。

该视频是在 Ubuntu 24.04 使用 Git 2.52.0 和 GitTree 2.0 录制的:更正、修改和仅消息编辑均在应用程序中完成;草案、其救援分支和支票在航站楼运行。 macOS 或 Windows 上没有运行任何内容,并且 Ubuntu 是唯一记录的 Linux 系统。 GitTree 的源 Git 版本是 2.39.0。

GitTree 要求您登录;免费计划涵盖了这里的每一步。不需要提供商帐户、专业版/试用版、API 凭证或互联网服务。本地裸源不是 GitLab 或 CI。所有身份均使用 example.com;切勿在源代码检查中运行本课程。

通过 GitTree 或本地路径以相同的输入进行突变,而不是连续进行。只读验证可以遵循其中任何一个。任何被描述为终端工作的准备工作都被标记为本机准备,而不是发明的应用程序功能。

概念和状态效应

修改从当前索引写入最后一次提交的替换。它不会向旧提交添加微小的更正记录。内容和消息可以一起更改,而旧对象仍然可以通过救援引用访问。

仅消息编辑不应默默地包含不相关的分阶段更改。应用程序的编辑提交消息…路由重写选定的提交/后代;它与此处演示的作曲家修改先前提交路径不同。

这里改变的主体保证了不同的客体身份。相同的父级并不意味着相同的提交。不要将修改视为对其他人已经基于工作的已发布提交的无害编辑。

新的索引内容成为替换提交;场景分支/HEAD 移动旧的 C→C′,父级保持 M,工作/索引干净。救援仍为C;原来的主/服务器不变。

准备准确的项目状态

从第 15 课留下的 clean 项目的单独普通副本开始。原始的 gittree-features 仍然保留;不要在原始或源结帐中运行此场景。 (课程的早期计划从后来合并课程的结果开始本课程;该课程尚未录制,因此视频使用第 15 课的项目和相同的步骤。)下面的两个页面主体是项目的 index.html,仅更改了英雄标题。存储库本地演示签名已关闭,身份为 GitTree Demo <demo@example.com>。

完整的文件输入

仅在下面指定的阶段保存。这些是完整的 UTF-8/LF 正文,最后有换行符;永远不要粘贴 Markdown 栅栏。未更改的可运行文件继承命名输入。单独变体中的版本不得覆盖原始版本。

index.html — HEADING_DRAFT

文件摘录 · 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>
  <link rel="stylesheet" href="styles.css">
</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">See your work cleary.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

index.html — HEADING_FIXED

文件摘录 · 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>
  <link rel="stylesheet" href="styles.css">
</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">See your work clearly, one change at a time.</h1>
      <p id="hero-copy">Choose one change, then check what Git saved.</p>
    </section>
    <section class="features" aria-labelledby="features-title">
      <h2 id="features-title">Follow your work</h2>
      <div class="cards">
        <article class="feature-card">
          <h3>History</h3>
          <p>Read commits and branches together.</p>
        </article>
        <article class="feature-card">
          <h3>Changes</h3>
          <p>Review the exact content selected for a commit.</p>
        </article>
        <article class="feature-card">
          <h3>Recovery</h3>
          <p>Inspect the scope of a recovery point before using it.</p>
        </article>
      </div>
    </section>
  </main>
  <footer><p>Built by a fictional team for GitTree Learn. Review one change at a time.</p></footer>
  <script type="module" src="site.js"></script>
</body>
</html>

在GitTree

调色板:Command+Shift+P(在 Ubuntu 上为 Ctrl+Shift+P);输入确切命名的命令并选择它。命名引用操作使用该行的上下文菜单,而不是无参数的调色板快捷方式。

  1. 准备以下私人征兵和救援部门;确认没有遥控器包含草稿。
  2. 显示文件→index.html;保存完整的 HEADING_FIXED,保留所有其他页面内容。
  3. 显示工作变化;仅检查预期的标题替换和阶段文件index.html。
  4. 在作曲家中检查 Amend Previous Commit;检查实际被替换的最后一次提交,而不是较旧的图形选择。 (在此版本中,“摘要”字段未填充旧消息;您将在下一步中编写新消息。)
  5. 设置摘要修复:澄清英雄标题。保持推送/签核/钩子绕过和其他可选行为关闭;审查分阶段的内容。
  6. 使用 Command+Enter(在 Ubuntu 上按 Ctrl+Enter)从作曲家提交一次;等待实际完成。不要提交第二次普通提交。修改先前提交选项随后会自行关闭。
  7. 验证实际的 C' 与救援 C、相同的父级、完整的 HEADING_FIXED 和清理工作不同。在以后的正常工作之前关闭 Amend Previous Commit。
  8. 仅消息替代方案,在仍包含草稿的单独副本中:右键单击草稿提交 → Edit History → Edit Commit Message…。该对话框的标题是“编辑消息”,该提交的短 ID 表示该提交及其上方的每个提交都会获得新的 ID。将 Message 替换为准确更正的主题,然后选择 Save Message。树和父树保持不变;仅 id 和消息发生变化。不要在修改后的结果上重复此操作。

对于每个普通提交:Summary 是规定的主题;描述为空;修改先前的提交、跳过挂钩、添加签署者、不同的作者、提交后推送以及允许空提交;没有共同作者。仅暂存指定的文件,然后将更改提交到 N 个文件一次(文件为一个),或者使用 Command+Enter 作为替代方案。等待真正的结果。明确修改的课程仅更改所述选项。

在航站楼

在第 15 课结果的单独副本中:

Command · bash
git switch --create scenario/amend

将 HEADING_DRAFT 放在 index.html 上(视频将课程文件保存在 ~/Downloads 中并使用 cp ~/Downloads/HEADING_DRAFT.html index.html),然后:

Command · bash
git add -- index.html
git commit --quiet -m "fix: hedaing"
git branch rescue/before-amend

保存完整的 HEADING_FIXED,然后:

Command · bash
git add -- index.html
git commit --quiet --amend --message "fix: clarify the hero heading"
git log -1 --format=%s
git rev-parse HEAD rescue/before-amend HEAD^ rescue/before-amend^
git status --short

观察对象:

输出
fix: clarify the hero heading

前两个 SHA 输出不同;最后两个同意。完整记录的文件等于 HEADING_FIXED,工作干净。单独的干净草稿副本中的本机仅消息替代方案使用 git commit --amend --only -m "fix: 澄清英雄标题"; --only 避免为该仅消息任务包含不相关的暂存路径。该应用程序的图形重写操作是一个独特的源支持路线;在已安装的版本中验证它。

结果

Where you end: 替换提交表示修复:澄清英雄标题并包含完整的 HEADING_FIXED;父级与旧提交的父级匹配,ID 不同;老提示获救;干净,未公开。

常见错误

  • 使用不相关的暂存文件进行修改。
  • 将替代窗格视为原始检查点。
  • 应用程序成功后重复已完成的突变。

如果出现问题

救援部门命名了旧的承诺草案。选择修复体之前进行比较;它不保留任意未暂存的编辑。如果挂钩/签名失败,请检查实际输出,不要绕过它们来匹配课程。

检查你的理解情况

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

  1. 第 1 题,共 6 题

    修改会创造什么?

    选择一个答案。

  2. 第 2 题,共 6 题

    必须审查什么?

    选择每个适用的答案。

  3. 第 3 题,共 6 题
    必填

    修正后的 C'? 的父级?

    选择一个答案。

  4. 第 4 题,共 6 题
    必填

    修改前添加一个不相关的暂存文件:内容?

    选择一个答案。

  5. 第 5 题,共 6 题

    草案已发表:以私人方式进行?

    选择一个答案。

  6. 第 6 题,共 6 题
    必填

    需要哪些证据?

    选择每个适用的答案。

0 个(共 6 个)正确

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

在此浏览器中检查。

练习

证明相同的父级、更改的对象 ID、精确更正的标题/消息和干净的状态。预测额外的暂存文件如何在单独的重播中更改作曲家修改内容。

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

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

回顾

  • 修改创建替换。
  • 该索引控制修改的内容。
  • 仅消息是一个单独的范围。

术语表介绍

修改——修改;改写 — ¡替换提交 — 更新。

视频文字记录

视频的旁白,逐条提示。

显示成绩单
  1. 从确切的检查点开始。
  2. 命名分支、索引 和工作版本。
  3. 仅准备单独的课程副本。
  4. 保护私人汇票 在更换之前。
  5. 保存完整的预期更正。
  6. 查看索引,而不仅仅是消息。
  7. 修改替换实际的最后一次提交。
  8. 明确写出更正的主题。
  9. 仅提交一次更换。
  10. 同一个父母并不意味着相同的身份。
  11. 仅消息编辑具有单独的范围。
  12. 修改会创造什么?
  13. Git 对象是不可变的; 替换者获得新的 ID。
  14. 必须审查什么?
  15. Composer修改使用索引 和最后提交上下文。
  16. 修正后的 C'? 的父级?
  17. 替换占用 相同的祖先位置。
  18. 添加不相关的分阶段 修改前的文件:内容?
  19. 当前索引定义 替换树。
  20. 草案已发表:以私人方式进行?
  21. 公开的身份可能会被其他人使用。
  22. 需要哪些证据?
  23. 验证两个替换 身份和预期内容。
  24. 验证实际结果, 不仅仅是一条消息。
  25. 在行动之前预测改变的输入。
  26. 在恢复之前保留有用的工作。
  27. 在继续之前证明检查点。
  28. 保留验证结果 以便下一步。