Introduction
在交互式 Copilot CLI 会话中工作时,可以按 Esc 或 Ctrl+C 来控制 Copilot 正在执行的操作。 两个键压都可以取消操作,但它们的工作方式略有不同:
-
<kbd>Ctrl</kbd>+<kbd>C</kbd> 会立即生效,无需再次按下进行确认 – 首先移除所有已排队的提示(每按一次移除一个),然后取消当前操作。 - 单次按下 Esc 键可让你进行更渐进的分阶段控制。 虽然 Copilot 正在积极工作,但单个 Esc 不会立即取消-它显示提醒,第二次按下会中断当前操作。 在本地会话中,任何已排队的提示随后都会作为下一轮次进行处理。 在由远程后端支持的会话或附加会话中,第二次按下则会完全取消该操作,并且已排队的提示不会延续到下一轮交互中。
如果 Copilot 已做出更改,而你想撤消这些更改,则可以回滚到会话中的较早时间点。 当 Copilot 工作时,Copilot CLI 会在它响应每个提示的过程中跟踪它所做的文件更改。 这样,当 Copilot 处于空闲状态且输入区域为空时,按两次 Esc 即可返回到较早的状态。 回退时,可以选择是仅回退对话,还是还原已更改的文件 Copilot 。
按 Esc 在不同情况下执行的操作
按 Esc 一次会执行不同的操作,具体取决于会话的当前状态:
| 当前状态 | 按 Esc 执行的操作 |
|---|---|
| Copilot 处于活动状态,无排队提示。 | 显示“再次 Esc 以取消”提醒。 仅当在半秒内再次按 Esc 时,才会取消正在运行的操作。 |
| Copilot 处于活动状态,有排队提示。 | 显示“再次 Esc 以取消”提醒。 再次按 Esc 会中断当前操作。 在本地会话中,已排队的提示词随后会作为下一轮处理;在远程支持的或附加会话中,该操作会被完全取消,已排队的提示词不会作为后续轮次执行。 |
| 权限对话框处于打开状态。 | 按一次 Esc 即可拒绝当前待处理的请求(无需再次按下)。 |
| 对话框、覆盖层或选择器已打开。 | 关闭对话框、覆盖或选取器。 |
| Copilot 处于空闲状态。 | 显示一个简短的提醒,即再次按 Esc 会快速打开回退选取器。 请参阅 回滚更改。 |
当 Copilot 处于空闲状态且输入区域为空时,快速按两次 Esc 可让你回退到会话中的较早节点。 在其他情况下,按两次 Esc 键会按以下优先顺序执行下列操作之一:
- 取消正在运行的 shell 命令。
- 停止当前响应。
- 停止后台代理程序。
- 清除输入区域中的文本。
如果这些情况都不适用,则会显示回退选择器。
何时使用 Esc 而不是 Ctrl+C
取消操作的这两种方法的主要区别在于 Esc 旨在逐步、有针对性的干预,而 Ctrl+C 是一个硬停止。
在中断操作之前需要确认键压时使用 Esc 。 如果出现权限对话框并想要拒绝该特定请求,则按 Esc 一次拒绝请求并停止当前操作。 如果你已在本地会话中将后续提示排队,连续按两次 Esc 会中断当前操作,并将这些排队的提示作为下一轮处理。 在由远程后端支持的会话或附加会话中,连续按两次 Esc 则会彻底取消该操作,而已排队的提示不会作为后续轮次运行。
如果想要取消,而无需确认第二次按 Esc,请使用 +C。 如果没有排队的提示,按一次 Ctrl+C 会立即取消当前操作。 如果有排队中的提示,则每按一次 Ctrl+C,都会移除最近加入队列的那个提示,每次只移除一个;只有在队列为空时,才会取消当前操作。 正在进行的任何文件写入都将完成(文件未在写入中损坏),但将放弃所有剩余的计划更改。 在输入区域为空的情况下,在两秒内再次按下 Ctrl+C 键,将完全退出会话。
作为经验法则,当您想要有选择地进行干预时,请使用 Esc;当您想要停止并重新开始时,请使用 Ctrl+C。
回滚更改
当 Copilot 处于非活动状态且输入区域中没有文本时,可以按 Esc 两次以显示当前会话中可回滚到的点列表。 每个点都对应你提交的一个提示,回退会使会话回到 Copilot 开始处理该提示之前的状态。
选择倒退点后,决定是否:
- 仅还原对话,文件保持原样。
-
**回退对话并还原文件**,这会还原 Copilot 更改的文件,同时保留你自己后续所做的编辑。
因为它仅还原更改的文件 Copilot ,而不是整个工作区,因此回退可以在任何目录中工作,包括不是 Git 存储库的文件夹。
有关如何使用双击 Esc 键回滚会话期间所做更改的完整详细信息,请参阅 回退 GitHub Copilot CLI 会话期间所做的更改。
警告
倒退会将整个工作区还原到所选快照中的状态。 这将还原在该点之后所做的所有更改——不仅包括由Copilot所做的更改,还包括任何手动编辑以及由 shell 命令导致的更改。 删除快照后在工作区中创建的任何新文件,而不考虑其 Git 状态。
回滚时会发生什么情况
回滚时发生的操作取决于所选选项。
如果选择将对话回退并还原文件:
- 文件已还原。 更改的文件 Copilot 将还原到所选提示之前的状态。 如果文件的当前内容不再与 Copilot 上次写入的内容一致(例如,因为你自行编辑过这些文件),系统就会跳过这些文件,以免覆盖你后续的修改。
- 会话历史记录将被截断。 对话将重新移动到所选点。 从会话中删除在该点之后发生的所有消息和工具调用。
- 已删除过时的快照。 已清理已丢弃轮次中捕获的文件更改。 较早的时间点仍然可供将来回退使用。
- 回滚已确认。 回滚后, Copilot 显示一条消息,指示已还原的文件数,并记录跳过的任何文件。
- 你的提示已恢复。 与所选点关联的提示放置在输入区域中,以便可以编辑并重新提交它。
如果你选择仅将对话回退,文件不会受到影响:会话历史记录会被截断(步骤 2),你的提示词会恢复到输入区域(步骤 5)。
无法回滚的更改
在以下情况下,文件还原将被跳过或无法进行:
- 文件超过 10 MB。 捕获期间会跳过大于 10 MB 的单个文件,因此在回滚期间不会还原对这些文件的更改。
- 超过 500 个已更改的文件。 如果在单个轮次期间更改了 500 多个文件,则不会捕获该轮次的文件更改,因此无法还原文件。 其他轮次不受影响。
- 你自己更改的文件。 当前内容与 Copilot 上次写入的内容不再匹配的文件将保持原样,不会被覆盖。
- 没有文件跟踪的会话。 如果恢复的是在启用文件更改跟踪功能之前启动的会话,则只有回退对话可用。 启动一个新会话,以便能够还原文件更改。
-
**远程支持的或繁忙的会话。** Rewind 不适用于远程支持的会话,或者会话仍在进行中。