课程 19 · 历史与融合
了解快进合并
将目标分支移动到现有的后代深色调色板提交,而无需创建另一个提交。将快进与必须拒绝的分歧输入进行对比。
- 级别: 中级
- 阅读 2 分钟
- 5 分钟的视频
- 已更新
- 在这节课之前: 合并具有不同历史记录的分支
进度已保存在此浏览器中。
播放时会加载来自 YouTube 的视频(隐私增强模式)。
你将学到什么
- 认识祖先的要求。
- 快进后证明相同的尖端 ID。
- 将引用移动与提交创建分开。
- 预测分歧时的拒绝。
开始之前
从第 18 课结果的单独副本开始(主要是合并,干净):在该提交中创建场景/ff-目标,然后在同一提交中创建功能/暗模式;深色调色板在该功能上获得了一次提交 D。合并前返回场景/ff-target。
该视频是在 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 或本地路径以相同的输入进行突变,而不是连续进行。只读验证可以遵循其中任何一个。任何被描述为终端工作的准备工作都被标记为本机准备,而不是发明的应用程序功能。
概念和状态效应
当目标提示是传入提示的祖先时,快进是可能的。将目标标签移动到后代会合并中间快照,而无需发明合并提交。
生成的提示具有 D 的现有身份和父级。早期的 M 仍然是第 18 课中的双亲合并;不要计算其父级并将它们误认为是本课程创建的新合并。
快进只是一个策略门,并不是对所有分支的修复。如果存在单独的目标提交,则两个提示都具有唯一的历史记录,并且此模式会拒绝。
仅目标分支/HEAD/索引/工作提前 M→D。功能保持 D,合并不会创建新的提交,服务器不变。
准备准确的项目状态
从第 18 课留下的项目的单独普通副本开始。原始的 gittree-features 仍然保留;不要在原始或源结帐中运行此场景。 (课程的早期计划命名为不同的起始检查点;视频使用第 18 课的结果和相同的步骤。)下面的样式表是项目的 styles.css,添加了一个深色调色板块。存储库本地演示签名已关闭,身份为 GitTree Demo <demo@example.com>。
完整的文件输入
仅在下面指定的阶段保存。这些是完整的 UTF-8/LF 正文,最后有换行符;永远不要粘贴 Markdown 栅栏。未更改的可运行文件继承命名输入。单独变体中的版本不得覆盖原始版本。
styles.css — 深色
:root {
color-scheme: light;
--page: #f7f8fa;
--surface: #ffffff;
--text: #17212e;
--link: #154ab5;
--line: #bac4d0;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
background: var(--page);
color: var(--text);
font: 1rem/1.6 system-ui, sans-serif;
}
a {
color: var(--link);
}
.site-header,
main,
footer {
width: min(68rem, 100% - 2rem);
margin-inline: auto;
}
.site-header {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 1rem;
padding-block: 1rem;
}
.hero {
max-width: 48rem;
padding-block: 3rem;
}
h1 {
font-size: clamp(2rem, 5vw, 3.5rem);
line-height: 1.2;
}
.cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(16rem, 100%), 1fr));
gap: 1rem;
}
.feature-card {
padding: 1rem;
border: 1px solid var(--line);
border-radius: 0.75rem;
background: var(--surface);
}
section {
margin-block-end: 2rem;
}
button,
input {
font: inherit;
}
button,
input {
padding: 0.5rem 0.75rem;
}
:focus-visible {
outline: 3px solid var(--link);
outline-offset: 3px;
}
form {
display: grid;
max-width: 28rem;
gap: 0.5rem;
}
:root[data-theme="dark"] {
color-scheme: dark;
--page: #121923;
--surface: #1b2635;
--text: #edf2f8;
--link: #a4c6ff;
--line: #7388a1;
}在GitTree
调色板:Command+Shift+P(在 Ubuntu 上为 Ctrl+Shift+P);输入确切命名的命令并选择它。命名引用操作使用该行的上下文菜单,而不是无参数的调色板快捷方式。
- 在单独的副本中准备scenario/ff-target和feature/dark-mode,如下所示;将该功能保存为完全黑暗。
- 仅提交 styles.css 作为壮举:添加深色调色板;验证特征D。
- 在“本地”下打开 scenario 文件夹,右键单击 ff-target → Checkout scenario/ff-target;确认其仍位于 M 且干净。
- 在“本地”下打开 feature 文件夹,右键单击 dark-mode → Merge feature/dark-mode into scenario/ff-target;在对话框中查看源和目标。
- 在Record it as中选择Fast-forward only;不要选择始终合并提交。
- 选择合并一次并等待。期望目标标签达到现有的D。
- 比较目标和特征的实际完整 SHA,然后检查 DARK 和 clean 工作。
- 在单独的分叉副本中(从“新选项卡”和“最近的存储库”中打开它)仅使用快进重复合并:应用程序拒绝并表示目标具有您尚未进行的更改。保持规范原件不变。
对于每个普通提交:Summary 是规定的主题;描述为空;修改先前的提交、跳过挂钩、添加签署者、不同的作者、提交后推送以及允许空提交;没有共同作者。仅暂存指定的文件,然后将更改提交到 N 个文件一次(文件为一个),或者使用 Command+Enter 作为替代方案。等待真正的结果。明确修改的课程仅更改所述选项。
在航站楼
在第 18 课结果的单独副本中:
git switch --create scenario/ff-target
git switch --create feature/dark-mode将完整的 DARK 样式表放在 styles.css 上,然后:
git add -- styles.css
git commit --quiet -m "feat: add the dark palette"
git switch --quiet scenario/ff-target
git merge --quiet --ff-only feature/dark-mode
git rev-parse HEAD feature/dark-mode
git log -1 --format=%s
git status --shortSHA 查询给出两个相同的实际 ID。观察对象:
feat: add the dark palette状态为空。该装置断言目标等于先前测量的 D,而不是新创建的合并节点。对于更改的输入,请在合并之前添加一个独立的 docs/integration-note.md 提交到另一个副本中的目标; ff-only 拒绝,保留两个分支。不要默默地选择不同的模式以使策略检查为绿色。
结果
Where you end: scene/ff-target 和 feature/dark-mode 名称与现有 D 相同。目标 HEAD/index/work 包含 DARK,没有新的合并节点,原来的 main/M 不变。
常见错误
- 调用任何图形行加入新的合并提交。
- 将替代窗格视为原始检查点。
- 应用程序成功后重复已完成的突变。
如果出现问题
如果被拒绝,请检查两个历史记录,并仅在审核后选择单独的合并/变基工作流程。拒绝本身不会更改目标文件或参考。
检查你的理解情况
回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。
0 个(共 6 个)正确
正确回答所需的问题以完成课程。
在此浏览器中检查。
练习
证明目标提示等于现有 D 并且工作匹配完全黑暗。在单独的副本中进行独立目标提交后预测拒绝;拒绝后比较旧的裁判。
您自己的确认:该网站无法看到您的计算机。
要完成本课程,请正确回答所需的问题并确认实践练习。
回顾
- 祖先关系允许快进。
- 传入的提交保留其 ID。
- ff-only 拒绝发散。
有关的
术语表介绍
快进 — 快进;后裔祖先——萨德。
视频文字记录
视频的旁白,逐条提示。
显示成绩单
- 从确切的检查点开始。
- 命名分支、索引 和工作版本。
- 仅准备单独的课程副本。
- 开始两个分支名称 在同一次提交中。
- 记录真实的调色板变化。
- 返回到不变的目标。
- 确认合并方向。
- 仅明确要求快进。
- 将标签移动到现有的后代。
- 验证身份,而不仅仅是图形形状。
- 保持不同的目标 而不是强迫它。
- 需要什么?
- 祖先,而不是名字或颜色, 确定快进。
- 有什么变化?
- 目标移动到 现有 D 无需推动。
- 生成的目标 SHA?
- 测量的目标等于 上一个功能提示。
- 添加了独立目标提交:仅限 ff?
- 背离违反了 需要祖门。
- 老M有两个父母: 证明这个动作合并了?
- M的现有血统不是 此操作的新提交。
- 什么证明完成?
- 参考身份和 需要文件状态。
- 验证实际结果, 不仅仅是一条消息。
- 在行动之前预测改变的输入。
- 在恢复之前保留有用的工作。
- 在继续之前证明检查点。
- 保留验证结果 以便下一步。