跳至内容
GitTree

课程 19 · 历史与融合

了解快进合并

将目标分支移动到现有的后代深色调色板提交,而无需创建另一个提交。将快进与必须拒绝的分歧输入进行对比。

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

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

英文旁白 · English and Arabic 字幕

打开视频页面在 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 — 深色

文件摘录 · 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);输入确切命名的命令并选择它。命名引用操作使用该行的上下文菜单,而不是无参数的调色板快捷方式。

  1. 在单独的副本中准备scenario/ff-target和feature/dark-mode,如下所示;将该功能保存为完全黑暗。
  2. 仅提交 styles.css 作为壮举:添加深色调色板;验证特征D。
  3. 在“本地”下打开 scenario 文件夹,右键单击 ff-target → Checkout scenario/ff-target;确认其仍位于 M 且干净。
  4. 在“本地”下打开 feature 文件夹,右键单击 dark-mode → Merge feature/dark-mode into scenario/ff-target;在对话框中查看源和目标。
  5. 在Record it as中选择Fast-forward only;不要选择始终合并提交。
  6. 选择合并一次并等待。期望目标标签达到现有的D。
  7. 比较目标和特征的实际完整 SHA,然后检查 DARK 和 clean 工作。
  8. 在单独的分叉副本中(从“新选项卡”和“最近的存储库”中打开它)仅使用快进重复合并:应用程序拒绝并表示目标具有您尚未进行的更改。保持规范原件不变。

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

在航站楼

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

Command · bash
git switch --create scenario/ff-target
git switch --create feature/dark-mode

将完整的 DARK 样式表放在 styles.css 上,然后:

Command · bash
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 --short

SHA 查询给出两个相同的实际 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 不变。

常见错误

  • 调用任何图形行加入新的合并提交。
  • 将替代窗格视为原始检查点。
  • 应用程序成功后重复已完成的突变。

如果出现问题

如果被拒绝,请检查两个历史记录,并仅在审核后选择单独的合并/变基工作流程。拒绝本身不会更改目标文件或参考。

检查你的理解情况

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

  1. 第 1 题,共 6 题

    需要什么?

    选择一个答案。

  2. 第 2 题,共 6 题

    有什么变化?

    选择每个适用的答案。

  3. 第 3 题,共 6 题
    必填

    生成的目标 SHA?

    选择一个答案。

  4. 第 4 题,共 6 题
    必填

    添加了独立目标提交:仅限 ff?

    选择一个答案。

  5. 第 5 题,共 6 题

    老M有两个父母:证明这个动作合并了?

    选择一个答案。

  6. 第 6 题,共 6 题
    必填

    什么证明完成?

    选择每个适用的答案。

0 个(共 6 个)正确

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

在此浏览器中检查。

练习

证明目标提示等于现有 D 并且工作匹配完全黑暗。在单独的副本中进行独立目标提交后预测拒绝;拒绝后比较旧的裁判。

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

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

回顾

  • 祖先关系允许快进。
  • 传入的提交保留其 ID。
  • ff-only 拒绝发散。

术语表介绍

快进 — 快进;后裔祖先——萨德。

视频文字记录

视频的旁白,逐条提示。

显示成绩单
  1. 从确切的检查点开始。
  2. 命名分支、索引 和工作版本。
  3. 仅准备单独的课程副本。
  4. 开始两个分支名称 在同一次提交中。
  5. 记录真实的调色板变化。
  6. 返回到不变的目标。
  7. 确认合并方向。
  8. 仅明确要求快进。
  9. 将标签移动到现有的后代。
  10. 验证身份,而不仅仅是图形形状。
  11. 保持不同的目标 而不是强迫它。
  12. 需要什么?
  13. 祖先,而不是名字或颜色, 确定快进。
  14. 有什么变化?
  15. 目标移动到 现有 D 无需推动。
  16. 生成的目标 SHA?
  17. 测量的目标等于 上一个功能提示。
  18. 添加了独立目标提交:仅限 ff?
  19. 背离违反了 需要祖门。
  20. 老M有两个父母: 证明这个动作合并了?
  21. M的现有血统不是 此操作的新提交。
  22. 什么证明完成?
  23. 参考身份和 需要文件状态。
  24. 验证实际结果, 不仅仅是一条消息。
  25. 在行动之前预测改变的输入。
  26. 在恢复之前保留有用的工作。
  27. 在继续之前证明检查点。
  28. 保留验证结果 以便下一步。