课程 12 · 日常工作
通过快进、合并或变基拉取
检查分歧后选择明确的拉动政策。使用三个副本和一台独立的本地服务器来比较仅快进拒绝、合并和私有变基。
- 级别: 中级
- 阅读 3 分钟
- 6 分钟的视频
- 已更新
- 在这节课之前: 获取队友的更改而不替换您的页面
进度已保存在此浏览器中。
播放时会加载来自 YouTube 的视频(隐私增强模式)。
你将学到什么
- 将提取与拉取集成分开。
- 比较三种明确的政策选择。
- 将仅限 ff 的拒绝视为政策结果。
- 查看上游和持久应用程序策略设置。
开始之前
从第 11 课留下的课程项目开始,将 main 带到 Leo 的获取提交;将该提交称为 M。然后,您将拥有一个分歧的三个普通副本:具有一个提交 S 的私有主题,以及具有一个不同提交 N 的服务器分支更新主分支,两者都位于 M 上。私有主题是最新且干净的。每个仅将 origin 指向包含 update-main/N 的新裸服务器,并跟踪 origin/updated-main;旧发布的定价/主要遥控器未发生变化。
该视频是在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 或本地路径以相同的输入进行突变,而不是连续进行。只读验证可以遵循其中任何一个。任何被描述为终端工作的准备工作都被标记为本机准备,而不是发明的应用程序功能。
概念和状态效应
Pull 是 fetch,然后是所选的集成策略;它不是刷新的同义词。即使 ff-only 稍后拒绝移动本地分支,获取阶段也可能会更新跟踪引用。
对于分歧的私有 S/N,ff-only 会拒绝,合并会保留两条路径,并且 rebase 会在获取的基础上重放私有提交。不要默默地改变模式来让拒绝消失。
调色板拉模式命令更新general.pullMode,这是一种应用程序范围的首选项,而不是一次性的 Git 标志。录制/恢复录制应用程序中的先前设置。下面的本机显式拉取标志不会更改该应用程序设置。
每次拉取都会获取其沙箱来源。仅 FF 将主题/索引/工作留在 S; merge 和 rebase 只更新自己的主题和文件。没有推送服务器分支。选择调色板策略还会更改应用程序范围的首选项,直到恢复为止。
准备准确的项目状态
从第 11 课留下的清洁课程项目的单独普通副本开始。原始的 gittree-features 仍然保留;不要在原始或源结帐中运行此场景。 (课程的早期计划从后来的合并课程的结果开始本课程;该课程尚未录制,因此视频使用第 11 课的项目和相同的步骤。)然后执行下面的精确准备。存储库本地演示签名已关闭,除非明确指定团队成员,否则 GitTree Demo <demo@example.com> 是身份。
完整的文件输入
仅在下面指定的阶段保存。这些是完整的 UTF-8/LF 正文,最后有换行符;永远不要粘贴 Markdown 栅栏。未更改的可运行文件继承命名输入。单独变体中的版本不得覆盖原始版本。
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>
<section aria-labelledby="signup-title">
<h2 id="signup-title">Try the demo form</h2>
<form id="signup-form" novalidate>
<label for="demo-email">Demo email</label>
<input id="demo-email" name="email" type="email" autocomplete="off" aria-describedby="signup-hint">
<p id="signup-hint">Use a fictional example.com address. Nothing is sent.</p>
<button type="submit">Check the address locally</button>
<p id="signup-result" role="status"></p>
</form>
</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>docs/integration-note.md — DOC_MERGE
# Integration review
This note was written on main while signup work was private.文档/pull-policy.md — DOC_PULL
# Pull policy
Fetch first and inspect ancestry.
Use fast-forward only when no integration decision is needed.
Merge preserves existing commit identities; rebase recreates private commits.
Never rewrite someone else's published work without coordination.在GitTree
调色板:Command+Shift+P(在 Ubuntu 上为 Ctrl+Shift+P);输入确切命名的命令并选择它。命名引用操作使用该行的上下文菜单,而不是无参数的调色板快捷方式。
- 下面准备三个实际的隔离副本及其自己的服务器/上游;在选择策略之前记录之前的general.pullMode。
- 在FF复制中,调色板拉:仅快进,然后工具栏Pull按钮;等待真正的分歧拒绝。该应用程序的通知显示“功能/注册表单无法快进”,表示双方均已提交另一方未提交的内容,没有任何更改,并提供 Resolve… 进行合并、变基或重置。它会一直保留到您将其关闭为止,因此请在下一个副本之前将其关闭。
- 即使获取的 origin/updated-main 是最新的,检查主题提示/工作是否不变;不要按强力推...。
- 在未触及的合并副本中,选择“拉动:如果可能则快进”,“否则合并”,然后选择工具栏“拉动”按钮;检查实际的双亲结果。
- 在未触及的 Rebase 副本中,选择 Pull:Rebase,然后 Pull;当前主题是私有的,不需要自动存储。
- 验证在 N 上重新创建的 S',合并父树和相等的完整树。独立保存每个结果。
- 仅在保留比较快照后,将完整的 DOC_PULL 保存为练习副本中的 docs/pull-policy.md;在这里不做任何承诺。
- 显式恢复录音应用之前的 Pull 模式;验证没有发生自动推送或原始主更改。
对于每个普通提交:Summary 是规定的主题;描述为空;修改先前的提交、跳过挂钩、添加签署者、不同的作者、提交后推送以及允许空提交;没有共同作者。仅暂存指定的文件,然后将更改提交到 N 个文件一次(文件为一个),或者使用 Command+Enter 作为替代方案。等待真正的结果。明确修改的课程仅更改所述选项。
在航站楼
在项目的单独干净副本中,首先将 main 引入 Leo 的获取提交(即 M),然后创建私有主题:
git merge --ff-only --quiet origin/main
git switch --create feature/signup-form将保存的 SIGNUP 文件放在 index.html 上(视频将课程文件保存在 ~/Downloads 中并使用 cp ~/Downloads/SIGNUP.html index.html),然后:
git add -- index.html
git commit --quiet -m "feat: add the local signup demonstration"
git branch rescue/signup-before-rebase
BASE_SHA="$(git rev-parse HEAD~1)"
git switch --quiet --create updated-main "$BASE_SHA"在 Updated-main 上将 DOC_MERGE 放在 docs/integration-note.md (cp ~/Downloads/DOC_MERGE.md docs/integration-note.md) 中,然后:
git add -- docs/integration-note.md
git commit --quiet -m "docs: add the integration review"
git switch --quiet feature/signup-formBASE_SHA 是私有注册提交之前测量的 M 父级。 topic 和 update-main 现在都有一个独立的提交; rescue/signup-before-rebase 保留了旧主题。该主题的任何内容均未发布。
从该预变基副本中,准备一个仅包含 N 的 new 服务器:
git clone --quiet --bare --single-branch --branch updated-main --no-local . ../gittree-pull-origin.git当没有 Git/app 操作处于活动状态时,使用 cp -R <source-demo-copy> <new-copy> 制作相同输入的三个普通副本,或保留 .git 的等效验证文件系统副本。在每个副本中,将 origin 替换为该新服务器的测量文件 URL,获取并设置上游主题;永远不要重新定位原始内容:
git remote set-url origin "<measured-file-url>"
git fetch --quiet --prune origin
git branch --set-upstream-to=origin/updated-main feature/signup-form使用测量的文件 URL 代替占位符。在 FF 副本中:
git pull --quiet --ff-only origin updated-main测出口128;诊断摘录:
hint: Diverging branches can't be fast-forwarded, you need to either:
hint:
hint: git merge --no-ff
hint:
hint: or:
hint:
hint: git rebase
hint:
hint: Disable this message with "git config set advice.diverging false"
fatal: Not possible to fast-forward, aborting.在单独的合并副本中:
git pull --quiet --no-rebase --no-edit origin updated-main在单独的变基副本中:
git pull --quiet --rebase origin updated-main两者都成功了;实际的最终树 ID 匹配,合并有两个父级并重放一个。对于每次检查:
git rev-list --parents -n 1 HEAD
git rev-parse 'HEAD^{tree}'
git status --shortSHA 各不相同;在可选策略文件实践之前,状态是干净的。没有命令推送分支。
结果
Where you end: 仅 FF 的副本在获取后拒绝保留在 S 处。合并副本添加了双亲集成;变基副本在 N 上创建 S'。合并/变基树一致;没有推动。仅在比较后将策略文件保留为未提交的实践。
常见错误
- 假设直图意味着旧的提交 ID 仍然存在。
- 将替代窗格视为原始检查点。
- 应用程序成功后重复已完成的突变。
如果出现问题
FF拒绝并不是数据丢失。检查获取的/本地参考并为该副本选择经过审查的策略。如果合并/变基停止,则解决/继续或显式中止;不要对活动操作运行另一个拉动操作。
检查你的理解情况
回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。
0 个(共 6 个)正确
正确回答所需的问题以完成课程。
在此浏览器中检查。
练习
解释被拒绝的副本中哪个状态发生了变化,比较两个成功的树和父树,然后编写完整的 DOC_PULL 策略。验证录音应用程序的首选项是否已恢复。
您自己的确认:该网站无法看到您的计算机。
要完成本课程,请正确回答所需的问题并确认实践练习。
回顾
- 拉动包括整合政策。
- 成功获取后可能会拒绝。
- 政策的持续性需要明确的审查。
有关的
术语表介绍
Rebase — 重新设置;重播——重播;救援裁判 — ????????????
视频文字记录
视频的旁白,逐条提示。
显示成绩单
- 从确切的检查点开始。
- 命名分支、索引 和工作版本。
- 仅准备单独的课程副本。
- 命名上游和 保留所有三个输入。
- 快进只会拒绝这种分歧。
- 成功获取后可能会出现拒绝。
- 合并策略保留了两个历史记录。
- 仅重播私人主题。
- 比较父母和 分别完整的树。
- 之后写下经过审查的拉取政策。
- 恢复之前的应用程序范围策略。
- 这里拉是什么?
- Pull 有一个传输阶段,并且 政策主导的地方阶段。
- 仅 ff 拒绝会发生什么?
- 获取可以在之前完成 整合拒绝分歧。
- N 上的私人重播:结果父级?
- 与合并 K 不同,Rebase 在 N 上创建 S'。
- 将当前工作更改为已发布共享 主题:rebase 仍然自动建议吗?
- 仅限私人的假设不再成立。
- 调色板策略命令 只改变一拉?
- 源码中写的是general.pullMode 直到另一个选择恢复它。
- 对比证明什么?
- 而是比较实际状态 而不是命令沉默。
- 验证实际结果, 不仅仅是一条消息。
- 在行动之前预测改变的输入。
- 在恢复之前保留有用的工作。
- 在继续之前证明检查点。
- 保留验证结果 以便下一步。