课程 16 · 日常工作
更正本地提交消息或内容
更正一个私人英雄提交中的拼写错误和消息,同时保留其旧提示。了解为什么修改会取代身份,以及为什么必须排除不相关的上演内容。
- 级别: 中级
- 阅读 3 分钟
- 5 分钟的视频
- 已更新
- 在这节课之前: 安全地忽略文件并清理未跟踪的工作
进度已保存在此浏览器中。
播放时会加载来自 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
<!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
<!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);输入确切命名的命令并选择它。命名引用操作使用该行的上下文菜单,而不是无参数的调色板快捷方式。
- 准备以下私人征兵和救援部门;确认没有遥控器包含草稿。
- 显示文件→index.html;保存完整的 HEADING_FIXED,保留所有其他页面内容。
- 显示工作变化;仅检查预期的标题替换和阶段文件index.html。
- 在作曲家中检查 Amend Previous Commit;检查实际被替换的最后一次提交,而不是较旧的图形选择。 (在此版本中,“摘要”字段未填充旧消息;您将在下一步中编写新消息。)
- 设置摘要修复:澄清英雄标题。保持推送/签核/钩子绕过和其他可选行为关闭;审查分阶段的内容。
- 使用 Command+Enter(在 Ubuntu 上按 Ctrl+Enter)从作曲家提交一次;等待实际完成。不要提交第二次普通提交。修改先前提交选项随后会自行关闭。
- 验证实际的 C' 与救援 C、相同的父级、完整的 HEADING_FIXED 和清理工作不同。在以后的正常工作之前关闭 Amend Previous Commit。
- 仅消息替代方案,在仍包含草稿的单独副本中:右键单击草稿提交 → Edit History → Edit Commit Message…。该对话框的标题是“编辑消息”,该提交的短 ID 表示该提交及其上方的每个提交都会获得新的 ID。将 Message 替换为准确更正的主题,然后选择 Save Message。树和父树保持不变;仅 id 和消息发生变化。不要在修改后的结果上重复此操作。
对于每个普通提交:Summary 是规定的主题;描述为空;修改先前的提交、跳过挂钩、添加签署者、不同的作者、提交后推送以及允许空提交;没有共同作者。仅暂存指定的文件,然后将更改提交到 N 个文件一次(文件为一个),或者使用 Command+Enter 作为替代方案。等待真正的结果。明确修改的课程仅更改所述选项。
在航站楼
在第 15 课结果的单独副本中:
git switch --create scenario/amend将 HEADING_DRAFT 放在 index.html 上(视频将课程文件保存在 ~/Downloads 中并使用 cp ~/Downloads/HEADING_DRAFT.html index.html),然后:
git add -- index.html
git commit --quiet -m "fix: hedaing"
git branch rescue/before-amend保存完整的 HEADING_FIXED,然后:
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 不同;老提示获救;干净,未公开。
常见错误
- 使用不相关的暂存文件进行修改。
- 将替代窗格视为原始检查点。
- 应用程序成功后重复已完成的突变。
如果出现问题
救援部门命名了旧的承诺草案。选择修复体之前进行比较;它不保留任意未暂存的编辑。如果挂钩/签名失败,请检查实际输出,不要绕过它们来匹配课程。
检查你的理解情况
回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。
0 个(共 6 个)正确
正确回答所需的问题以完成课程。
在此浏览器中检查。
练习
证明相同的父级、更改的对象 ID、精确更正的标题/消息和干净的状态。预测额外的暂存文件如何在单独的重播中更改作曲家修改内容。
您自己的确认:该网站无法看到您的计算机。
要完成本课程,请正确回答所需的问题并确认实践练习。
回顾
- 修改创建替换。
- 该索引控制修改的内容。
- 仅消息是一个单独的范围。
有关的
术语表介绍
修改——修改;改写 — ¡替换提交 — 更新。
视频文字记录
视频的旁白,逐条提示。
显示成绩单
- 从确切的检查点开始。
- 命名分支、索引 和工作版本。
- 仅准备单独的课程副本。
- 保护私人汇票 在更换之前。
- 保存完整的预期更正。
- 查看索引,而不仅仅是消息。
- 修改替换实际的最后一次提交。
- 明确写出更正的主题。
- 仅提交一次更换。
- 同一个父母并不意味着相同的身份。
- 仅消息编辑具有单独的范围。
- 修改会创造什么?
- Git 对象是不可变的; 替换者获得新的 ID。
- 必须审查什么?
- Composer修改使用索引 和最后提交上下文。
- 修正后的 C'? 的父级?
- 替换占用 相同的祖先位置。
- 添加不相关的分阶段 修改前的文件:内容?
- 当前索引定义 替换树。
- 草案已发表:以私人方式进行?
- 公开的身份可能会被其他人使用。
- 需要哪些证据?
- 验证两个替换 身份和预期内容。
- 验证实际结果, 不仅仅是一条消息。
- 在行动之前预测改变的输入。
- 在恢复之前保留有用的工作。
- 在继续之前证明检查点。
- 保留验证结果 以便下一步。