课程 18 · 历史与融合
合并具有不同历史记录的分支
将已发布的工作流程卡功能与 main 的独立可访问性和页脚更改相结合。验证真正的双父合并和完整的结果页面。
- 级别: 中级
- 阅读 3 分钟
- 4 分钟的视频
- 已更新
- 在这节课之前: 创建一个功能分支并仅退役一次性引用
进度已保存在此浏览器中。
播放时会加载来自 YouTube 的视频(隐私增强模式)。
你将学到什么
- 认识到与祖先的分歧。
- 选择显式合并记录模式。
- 验证父项和合并内容。
- 将本地合并与服务器发布分开。
开始之前
从第 17 课结束的地方开始:主要是 Maya 的 README 提交,干净;已发布的功能/定价卡仍然是 F1,是 H5 的分支。您保存并提交 MAIN_ACCESSIBLE 作为准备,以便 main 和功能各自具有独立的提交。
该视频是在 Ubuntu 24.04 上使用 Git 2.52.0 和 GitTree 2.0 录制的:页面、其提交和合并均在应用程序中完成;之前的状态、被拒绝的快进在单独的副本中以及在终端中运行的检查(包括项目自己的 lint、测试和构建)。 macOS 或 Windows 上没有运行任何内容,并且 Ubuntu 是唯一记录的 Linux 系统。 GitTree 的源 Git 版本是 2.39.0。
GitTree 要求您登录;免费计划涵盖了这里的每一步。不需要提供商帐户、专业版/试用版、API 凭证或互联网服务。本地裸源不是 GitLab 或 CI。所有身份均使用 example.com;切勿在源代码检查中运行本课程。
通过 GitTree 或本地路径以相同的输入进行突变,而不是连续进行。只读验证可以遵循其中任何一个。任何被描述为终端工作的准备工作都被标记为本机准备,而不是发明的应用程序功能。
概念和状态效应
发散意味着两个分支都不是另一个分支可以快进到的后代。 Git 找到一个共同的祖先并组合与其相关的更改。仅凭分支名称无法告诉您是否需要合并提交。
合并提交按顺序记录两个父级。第一个父级是签出分支的先前提示;第二个是合并的一面。现有的功能提交保留其身份;一个新的合并提交连接了他们的祖先。
没有文本冲突并不能证明语义正确性。验证完整文件中的可聚焦主体、工作流程部分以及Leo的提醒;运行现有检查。本地合并不会更新源,直到单独的授权推送为止。
准备和合并移动本地 main/HEAD 并更新索引/工作。功能参考仍然是 F1。 origin 分支和 v0.1.0 都保留了之前的提示。
准备准确的项目状态
在主保存 MAIN_ACCESSIBLE 上,仅暂存 index.html 并提交修复:使主要地标可聚焦。这使得本机/应用程序合并输入明确;合并之前不要提交已合并的 MERGED 文件。
完整的文件输入
仅在下面指定的阶段保存。这些是完整的 UTF-8/LF 正文,最后有换行符;永远不要粘贴 Markdown 栅栏。未更改的可运行文件继承命名输入。单独变体中的版本不得覆盖原始版本。
index.html — MAIN_ACCESSIBLE
<!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" tabindex="-1">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">See your work clearly.</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 — 合并
<!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" tabindex="-1">
<section class="hero" aria-labelledby="hero-title">
<p class="eyebrow">GitTree Learn demo project</p>
<h1 id="hero-title">See your work clearly.</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>
<section aria-labelledby="plans-title">
<h2 id="plans-title">Choose the workflow you need</h2>
<div class="cards">
<article class="feature-card">
<h3>Local Git</h3>
<p>Local Git workflows work without signing in.</p>
</article>
<article class="feature-card">
<h3>Connected workflows</h3>
<p>Provider integrations and Nour require Pro or an applicable trial.</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);输入确切命名的命令并选择它。命名引用操作使用该行的上下文菜单,而不是无参数的调色板快捷方式。
- 通过Show Files→index.html→Save保存MAIN_ACCESSIBLE;仅审查 tabindex 添加。
- 显示工作变化;阶段文件index.html;提交修复:使主要地标在普通选项关闭的情况下可聚焦。
- 检查主要卡和功能/定价卡图谱;保持主要检查。
- 在本地下打开 feature 文件夹,右键单击 pricing-cards → Merge feature/pricing-cards into main。该对话框后面带有 Record it as。
- 在 Record it as 中,如果可能的话,选择是快进,否则合并提交; Always a merge commit;仅快进;并压缩为分阶段更改(无提交)。选择始终合并提交。如果实际预览显示意外路径或冲突,请取消。
- 选择合并一次并等待实际完成。不要用壁球代替分阶段的改变。
- 检查生成的提交的两个父级并将完整的index.html 与MERGED 进行比较;验证所有三个独立的更改。
- 运行本地检查和干净状态查询;将 main 保留在本地合并中,提交后不推送。该应用程序自己的合并主题是“合并分支'feature/pricing-cards'”;它不必与下面的本机消息匹配。
对于每个普通提交:Summary 是规定的主题;描述为空;修改先前的提交、跳过挂钩、添加签署者、不同的作者、提交后推送以及允许空提交;没有共同作者。仅暂存指定的文件,然后将更改提交到 N 个文件一次(文件为一个),或者使用 Command+Enter 作为替代方案。等待真正的结果。明确修改的课程仅更改所述选项。
在航站楼
保存MAIN_ACCESSIBLE后,本机准备并合并:
git add -- index.html
git commit --quiet -m "fix: make the main landmark focusable"
git branch course-before-merge
git merge --quiet --no-ff feature/pricing-cards --message "merge: combine workflow cards with accessibility"
git log -1 --format=%s
git rev-list --parents -n 1 HEAD
git status --short实际主题:
merge: combine workflow cards with accessibility父查询发出实际的合并 SHA,后跟两个父 SHA; ID 不同。完整合并的index.html与fixture中的MERGED逐字节匹配;状态为空。显式本机主题不需要与应用程序生成的主题匹配:如果祖先/内容一致,则接受实际的应用程序消息,切勿覆盖虚假的本机消息。
npm run --silent lint
npm test -- --test-reporter=tap
npm run --silent build针对合并的检查点运行这些;源文本和父计数本身并不能证明检查。夹具套件有六项测试。对发散输入的单独 ff-only 尝试必须拒绝,而不是默默地选择此合并模式。
结果
Where you end: 将 M 与第一个父级(准备好的主要提示)和第二个父级 F1 合并的要点;完整的合并页面包含工作流程卡、Leo 页脚和可聚焦的主页面。索引/工作清洁;没有远程推送。
常见错误
- 合并方向错误。
- 将南瓜称为双亲合并。
- 信任无冲突预览作为语义证明。
如果出现问题
如果真正的合并停止,则保持其操作状态并使用稍后教授的冲突/中止工作流程;不要发出不相关的重置。在完成本机合并之前,course-before-merge 仅保留旧的提交提示,而不保留任意工作字节。
检查你的理解情况
回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。
0 个(共 6 个)正确
正确回答所需的问题以完成课程。
在此浏览器中检查。
练习
验证确切的合并字节和两个实际父级,F1 不变。预测仅对原始发散输入拒绝快进;仅在单独的副本中进行测试。
您自己的确认:该网站无法看到您的计算机。
要完成本课程,请正确回答所需的问题并确认实践练习。
回顾
- 分歧是一种血统关系。
- 合并保留旧的提交身份。
- 内容和家长检查都是必需的。
有关的
术语表介绍
合并——合并提交 — ?????????????????????共同祖先 — การรรรร第一个父母 - ?????????
视频文字记录
视频的旁白,逐条提示。
显示成绩单
- 从确切的检查点开始。
- 命名分支、索引 和工作版本。
- 仅准备单独的课程副本。
- 准备独立 可访问性变化。
- 仅记录预期的主要更改。
- 检查实际的分歧血统。
- 将该功能合并到当前的 main 中。
- 刻意选择录制模式。
- 等待真正的合并结果。
- 验证父项和合并内容。
- 将此合并保留在本地,直到经过审核。
- 是什么让合并提交与众不同?
- 血统是由父母定义的 ID,而不是消息或颜色。
- 需要哪些证据?
- 结构上有效的合并 仍然可能有错误的内容。
- F1的身份会发生什么变化?
- 合并连接现有提交 而不是重播它们。
- 在此选择 ff-only 分歧输入:结果?
- 这两个提示都不是必需的 简单快进的后代。
- 没有文字冲突 意味着不需要测试?
- 语义正确性需求 内容审查和测试。
- 最终的范围是什么?
- 本地合并中没有推送。
- 验证实际结果, 不仅仅是一条消息。
- 在行动之前预测改变的输入。
- 在恢复之前保留有用的工作。
- 在继续之前证明检查点。
- 保留验证结果 以便下一步。