跳至内容
GitTree

课程 30 · 恢复

GitTree 撤消、重做和恢复快照

从 GitTree 的工具栏撤消提交,重做,并了解应用程序可以收回什么、不能收回什么、何时拒绝以及为何保留恢复快照。

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

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

英文旁白 · English and Arabic 字幕

打开视频页面在 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)。

  1. 在单独的副本中,创建分支 private/undo-demo 并将 DOC_LOST 保存为 docs/signup-recovery.md。打开更改列表:文件是新的。
  2. 仅暂存该文件并使用摘要 docs: demonstrate a reversible local commit 提交它。等待真正的结果。
  3. 将鼠标悬停在工具栏中的 Undo。工具提示显示“撤消:提交...”。如果它指定了另一个步骤,请停止:不要撤消您无意的事情。
  4. 选择 Undo 一次。通知上写着“撤消:提交”。分支回到 M 上,注释为 staged,未删除。
  5. 将鼠标悬停在 Redo。工具提示显示“重做:提交...”。选择 Redo 一次。通知上写着“Redid:提交”。提交回来了,工作树是干净的。
  6. Separate stale-state copy. 在第二个副本中,重复步骤 1 到 4,然后在 GitTree 之外,使用 git commit -m "docs: external move after app undo" 提交暂存注释。查看 Redo:它被禁用,其原因是“分支已移动;撤消将覆盖该更改。”不要强迫它。
  7. 打开调色板并运行 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 干净副本中:

Command · bash
git switch --create private/undo-demo
BEFORE_SHA="$(git rev-parse HEAD)"

将 DOC_LOST 保存为 docs/signup-recovery.md,然后:

Command · bash
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 --short
输出
A  docs/signup-recovery.md

分支返回并且文件已暂存。再次前进:

Command · bash
git reset --soft "$AFTER_SHA"
git status --short

状态为空。这些命令会not调用应用程序的撤消或重做、记录GitTree日记条目或创建快照; git for-each-ref refs/ogt/trash 在此副本中不打印任何内容。在应用程序制作的镜头中,它列出了真实的快照名称,您可以在不更改它们的情况下读取它们。

防止陈旧步骤的方法是比较和交换。 Git 在 update-ref 中也有同样的想法,只有当引用仍然包含您期望的值时,它才会移动引用。外部提交后:

Command · bash
git update-ref refs/heads/private/undo-demo "$AFTER_SHA" "$BEFORE_SHA"

Git 拒绝并表示“无法锁定引用……位于……但预期……”。 GitTree 自己的拒绝是工具提示中的拒绝:“此后分支已移动;撤消将覆盖该更改。”

结果

Where you end: 在第一个副本中,注释被提交、撤消(暂存、M 上的分支)和重做(提交上的分支,树清理)。在过时的副本中,由于分支移动,重做被拒绝,并且外部提交保持不变。您打开了快照对话框并关闭了它,但没有删除任何内容。

常见错误

  • 在不阅读工具提示的情况下按“撤消”,并撤消您无意的步骤。
  • 假设每个操作都可以撤消或重做:强制推送和删除的存储都不能,并且大多数步骤都没有重做。
  • 期望撤消覆盖您在 GitTree 之外的编辑器中所做的编辑。
  • 删除旧快照进行整理,这样就消除了返回的途径。

如果出现问题

如果“撤消”被禁用,请阅读工具提示中的原因:分支已移动、文件已被编辑、遥控器已更改或没有任何可撤消的内容。如果步骤被拒绝,其恢复快照将保存在 refs/ogt/trash/* 下;当您不确定时请勿删除它。对于在 GitTree 之外进行的提交,请使用第 29 课中的引用日志。

检查你的理解情况

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

  1. 第 1 题,共 6 题

    按“撤消”键之前应该做什么?

    选择一个答案。

  2. 第 2 题,共 6 题

    GitTree 拒绝撤消以下哪些步骤并给出明确的理由?

    选择每个适用的答案。

  3. 第 3 题,共 6 题
    必填

    您在 GitTree 中提交注释并选择“撤消”一次。你看到了什么?

    选择一个答案。

  4. 第 4 题,共 6 题

    更改输入:撤消后,在 GitTree 之外提交暂存注释,然后查看重做。你看到了什么?

    选择一个答案。

  5. 第 5 题,共 6 题
    必填

    撤消显示为灰色,其工具提示显示“其恢复快照已删除”。发生了什么事,你该怎么办?

    选择一个答案。

  6. 第 6 题,共 6 题
    必填

    在纯 Git 模型副本中,哪些回读显示了提交撤消的作用?

    选择每个适用的答案。

0 个(共 6 个)正确

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

在此浏览器中检查。

练习

记下撤消工具提示所说的内容、撤消后分支和暂存列表的样子以及重做的操作。在陈旧的副本中,写下 Redo 给出的原因。然后说出应用程序无法撤消的一个步骤并说明原因。

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

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

回顾

  • 按下之前请阅读工具提示。
  • 撤消提交会保留其更改。
  • 移动的分支或编辑的文件会使撤消拒绝;快照被保留。

术语表介绍

撤消 — 撤销;重做 — 重做;杂志 — নারেরা;恢复快照 — 恢复快照。

视频文字记录

视频的旁白,逐条提示。

显示成绩单
  1. GitTree 可以后退一些步骤。这是 如何以及在哪里停止。
  2. GitTree 记录自己的步骤。 撤消会撤消最新的一项。
  3. 在采取危险步骤之前,它可以挽救恢复 先快照。
  4. 我们有一个分支和一个新笔记。
  5. 仅暂存该文件。
  6. 写总结。所有选项均保留 关闭。
  7. 在 GitTree 本身中提交一次。
  8. 在终端中进行的提交不在此 记录。
  9. 将鼠标悬停撤消。工具提示命名该步骤: 提交。
  10. 如果它命名了其他内容,请停止。
  11. 选择撤消一次。通知说已取消 提交。
  12. 分支又回到了 M 上。
  13. 并且该注释是暂存的,而不是删除的。 什么都没有丢失。
  14. 现在重做相同的提交。
  15. 选择重做一次。提交回来了。
  16. 工作树又干净了。
  17. 在第二个副本中,我们提交并撤消 同样的方式。
  18. 现在将暂存的笔记提交到外面 GitTree。
  19. 重做已禁用。此后分店搬迁。
  20. 它不会影响您的提交。绝不强迫 它。
  21. 其他原因:文件编辑、远程 改变了,第一次提交。
  22. 现在是快照。运行删除旧恢复 快照。
  23. 它说只有列出的快照是 已删除。
  24. 留出三十天,然后选择“查找”。
  25. 关闭它。没有什么会自行过期。
  26. 在普通的 Git 副本中,软重置可以提供 相同的形状。
  27. 再往前走,树就干净了, 没有应用程序快照。
  28. Git 以同样的方式保护引用:移动它 仅当它满足您的期望时。
  29. 撤消不是全局倒带。它逆转了 应用程序记录的步骤。
  30. 练习:写出tooltip,结果 撤消、重做和过时的原因。
  31. 接下来,分离的 HEAD 意味着什么。