Introduction
在交互式 Copilot CLI 会话中工作时,可以按 Esc 或 Ctrl+C 来控制 Copilot 正在执行的操作。 两个键压都可以取消操作,但它们的工作方式略有不同:
- Ctrl+C 会立即生效,无需再次按下进行确认——首先移除所有已排队的提示(每按一次移除一个),然后取消当前操作。
- 单次按下 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 命令。
- 停止当前响应。
- 停止后台代理。
- 清除输入区域中的文本。
- 退出 shell 模式。
如果未应用这些选项,则会显示回退选取器。
何时使用 Esc 而不是 Ctrl+C
取消操作的这两种方法的主要区别在于 Esc 旨在逐步、有针对性的干预,而 Ctrl+C 是一个硬停止。
在希望与 交互而不一定结束当前操作时,请使用 Copilot。 例如,如果出现权限对话框并想要拒绝此请求,按 Esc 键将关闭对话框,并继续 Copilot 工作,只是不会使用你拒绝的工具。 同样,如果已将后续提示排入队列,并且想要取消它们,而不会中断正在进行的工作,请按 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 不适用于远程支持的会话,或者会话仍在进行中。