课程 30 · 恢复
GitTree 撤消、重做和恢复快照
从 GitTree 的工具栏撤消提交,重做,并了解应用程序可以收回什么、不能收回什么、何时拒绝以及为何保留恢复快照。
- 级别: 中级
- 阅读 2 分钟
- 6 分钟的视频
- 已更新
- 在这节课之前: 重置:软重置、混合重置和硬重置, 使用 reflog 查找丢失的提交
进度已保存在此浏览器中。
播放时会加载来自 YouTube 的视频(隐私增强模式)。
你将学到什么
- 在按下它之前,请先阅读下一个“撤消”或“重做”将执行的操作。
- 预测撤消提交会保留其更改,并且重做可以恢复提交。
- 认识应用程序拒绝撤消或重做的原因:分支移动、文件更改、遥控器更改。
- 了解什么是恢复快照以及如何有意删除旧快照。
开始之前
您位于 private/undo-demo,这是第 18 课结果 M 的一个分支,具有干净的工作树。您将创建一个小注释 docs/signup-recovery.md,并将其提交 through GitTree,因为 GitTree 的撤消操作是根据其自身记录的步骤进行的。在终端中进行的提交是另一回事,不会进入该记录。
一切都是本地的并且采用免费套餐(GitTree 要求您登录):没有托管帐户、没有提供商、没有互联网。每个身份都是虚构的(example.com)。切勿在实际项目中运行本课程。
在 GitTree 中或使用本机 Git 命令进行更改,而不是在同一副本中进行更改。读取结果总是安全的。菜单标签、工具提示和通知来自 GitTree 2.0 自己的字符串和源。本机命令在一次性副本中使用 Git 2.43 运行,并且仅显示 Git 模型,而不显示应用程序的记录。 GitTree 步骤未在 macOS、Windows 或 Linux 上运行。
概念和状态效应
GitTree 保留其执行的步骤的 journal。撤消会撤消最新的步骤,而重做则会重复上次撤消的步骤。工具栏工具提示会命名该步骤,例如“撤消:提交...”。首先阅读它:如果它的名称与您期望的不同,请停止。
在执行破坏性步骤之前,GitTree 在 refs/ogt/trash/* 下保存 recovery snapshot 并写入日志条目。撤消从该记录恢复,并且仅当此后没有任何更改时:仅当分支仍指向步骤离开的位置时,分支才会被移回,并且仅当之后没有人编辑文件时才会恢复文件。否则,撤消将被拒绝并给出原因,并且快照将被保留。
撤消 commit 会将分支移回并保留已提交的更改,因此不会丢失任何内容。重做该提交将分支再次向前移动到同一提交。并非每个步骤都可以重做,有些步骤无法撤消:用力推动更改了遥控器(“再次推动以将其更改回来”);已删除的存储保留为快照,但尚未撤消;第一次提交没有早期状态。中途停止的步骤没有完整的结果可以撤消。
快照不会按计划删除。命令 Delete Old Recovery Snapshots… 允许您选择一个年龄,准确显示哪些快照较旧,并在您确认后仅删除那些快照。删除快照将消除返回该步骤的路径。
撤消和重做仅更改本地存储库。没有任何内容被发布。
准备准确的项目状态
从您信任的第 18 课结果 M 的单独普通副本开始,并保持原件不变。创建分支并做笔记。 DOC_LOST 是注释的内容。
完整的文件输入
仅在下面指定的阶段保存。这些是完整的 UTF-8/LF 正文,最后有换行符;永远不要粘贴 Markdown 栅栏。未更改的可运行文件继承命名输入。单独变体中的版本不得覆盖原始版本。
docs/signup-recovery.md — DOC_LOST
# Recovered signup work
Keep a branch name before leaving useful experimental work.在GitTree
使用 Command+Shift+P(在 Ubuntu 上为 Ctrl+Shift+P)打开调色板。 Undo 和 Redo 位于工具栏和调色板中;快捷键是 Command+Z 用于撤消,Command+Shift+Z 或 Command+Y 用于重做(在 Windows 和 Linux 上按 Ctrl)。
- 在单独的副本中,创建分支
private/undo-demo并将 DOC_LOST 保存为docs/signup-recovery.md。打开更改列表:文件是新的。 - 仅暂存该文件并使用摘要
docs: demonstrate a reversible local commit提交它。等待真正的结果。 - 将鼠标悬停在工具栏中的 Undo。工具提示显示“撤消:提交...”。如果它指定了另一个步骤,请停止:不要撤消您无意的事情。
- 选择 Undo 一次。通知上写着“撤消:提交”。分支回到 M 上,注释为 staged,未删除。
- 将鼠标悬停在 Redo。工具提示显示“重做:提交...”。选择 Redo 一次。通知上写着“Redid:提交”。提交回来了,工作树是干净的。
- Separate stale-state copy. 在第二个副本中,重复步骤 1 到 4,然后在 GitTree 之外,使用
git commit -m "docs: external move after app undo"提交暂存注释。查看 Redo:它被禁用,其原因是“分支已移动;撤消将覆盖该更改。”不要强迫它。 - 打开调色板并运行 Delete Old Recovery Snapshots…。将 Older than (days) 保留为 30 并选择 Find。阅读列表中的内容:“没有快照那么旧”。或旧的列表。关闭对话框;不要删除任何内容来完成课程。
对于课程中的每个普通提交:Summary 是规定的主题,Description 为空,并且选项 Amend Previous Commit、Skip Hooks、Add Signed-off-by、Different Author、Push After Commit 和 Allow Empty Commit 保持关闭状态。
在航站楼
终端不使用应用程序的日志。这是提交撤消操作的简单 Git 模型,位于第 18 课结果的 different 干净副本中:
git switch --create private/undo-demo
BEFORE_SHA="$(git rev-parse HEAD)"将 DOC_LOST 保存为 docs/signup-recovery.md,然后:
git add -- docs/signup-recovery.md
git commit --quiet -m "docs: demonstrate a reversible local commit"
AFTER_SHA="$(git rev-parse HEAD)"
git reset --soft "$BEFORE_SHA"
git status --shortA docs/signup-recovery.md分支返回并且文件已暂存。再次前进:
git reset --soft "$AFTER_SHA"
git status --short状态为空。这些命令会not调用应用程序的撤消或重做、记录GitTree日记条目或创建快照; git for-each-ref refs/ogt/trash 在此副本中不打印任何内容。在应用程序制作的镜头中,它列出了真实的快照名称,您可以在不更改它们的情况下读取它们。
防止陈旧步骤的方法是比较和交换。 Git 在 update-ref 中也有同样的想法,只有当引用仍然包含您期望的值时,它才会移动引用。外部提交后:
git update-ref refs/heads/private/undo-demo "$AFTER_SHA" "$BEFORE_SHA"Git 拒绝并表示“无法锁定引用……位于……但预期……”。 GitTree 自己的拒绝是工具提示中的拒绝:“此后分支已移动;撤消将覆盖该更改。”
结果
Where you end: 在第一个副本中,注释被提交、撤消(暂存、M 上的分支)和重做(提交上的分支,树清理)。在过时的副本中,由于分支移动,重做被拒绝,并且外部提交保持不变。您打开了快照对话框并关闭了它,但没有删除任何内容。
常见错误
- 在不阅读工具提示的情况下按“撤消”,并撤消您无意的步骤。
- 假设每个操作都可以撤消或重做:强制推送和删除的存储都不能,并且大多数步骤都没有重做。
- 期望撤消覆盖您在 GitTree 之外的编辑器中所做的编辑。
- 删除旧快照进行整理,这样就消除了返回的途径。
如果出现问题
如果“撤消”被禁用,请阅读工具提示中的原因:分支已移动、文件已被编辑、遥控器已更改或没有任何可撤消的内容。如果步骤被拒绝,其恢复快照将保存在 refs/ogt/trash/* 下;当您不确定时请勿删除它。对于在 GitTree 之外进行的提交,请使用第 29 课中的引用日志。
检查你的理解情况
回答每个问题,然后阅读原因。标记为“必填”的问题将有助于完成本课程。
0 个(共 6 个)正确
正确回答所需的问题以完成课程。
在此浏览器中检查。
练习
记下撤消工具提示所说的内容、撤消后分支和暂存列表的样子以及重做的操作。在陈旧的副本中,写下 Redo 给出的原因。然后说出应用程序无法撤消的一个步骤并说明原因。
您自己的确认:该网站无法看到您的计算机。
要完成本课程,请正确回答所需的问题并确认实践练习。
回顾
- 按下之前请阅读工具提示。
- 撤消提交会保留其更改。
- 移动的分支或编辑的文件会使撤消拒绝;快照被保留。
有关的
术语表介绍
撤消 — 撤销;重做 — 重做;杂志 — নারেরা;恢复快照 — 恢复快照。
视频文字记录
视频的旁白,逐条提示。
显示成绩单
- GitTree 可以后退一些步骤。这是 如何以及在哪里停止。
- GitTree 记录自己的步骤。 撤消会撤消最新的一项。
- 在采取危险步骤之前,它可以挽救恢复 先快照。
- 我们有一个分支和一个新笔记。
- 仅暂存该文件。
- 写总结。所有选项均保留 关闭。
- 在 GitTree 本身中提交一次。
- 在终端中进行的提交不在此 记录。
- 将鼠标悬停撤消。工具提示命名该步骤: 提交。
- 如果它命名了其他内容,请停止。
- 选择撤消一次。通知说已取消 提交。
- 分支又回到了 M 上。
- 并且该注释是暂存的,而不是删除的。 什么都没有丢失。
- 现在重做相同的提交。
- 选择重做一次。提交回来了。
- 工作树又干净了。
- 在第二个副本中,我们提交并撤消 同样的方式。
- 现在将暂存的笔记提交到外面 GitTree。
- 重做已禁用。此后分店搬迁。
- 它不会影响您的提交。绝不强迫 它。
- 其他原因:文件编辑、远程 改变了,第一次提交。
- 现在是快照。运行删除旧恢复 快照。
- 它说只有列出的快照是 已删除。
- 留出三十天,然后选择“查找”。
- 关闭它。没有什么会自行过期。
- 在普通的 Git 副本中,软重置可以提供 相同的形状。
- 再往前走,树就干净了, 没有应用程序快照。
- Git 以同样的方式保护引用:移动它 仅当它满足您的期望时。
- 撤消不是全局倒带。它逆转了 应用程序记录的步骤。
- 练习:写出tooltip,结果 撤消、重做和过时的原因。
- 接下来,分离的 HEAD 意味着什么。