Skip to main content

取消 GitHub Copilot CLI 操作并回滚更改

了解取消活动 Copilot 操作的不同方法,以及如果结果不符合预期如何回滚会话期间所做的更改。

Introduction

在交互式 Copilot CLI 会话中工作时,可以按 EscCtrl+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 状态。

回滚时会发生什么情况

回滚时发生的操作取决于所选选项。

如果选择倒退对话 还原文件:

  1. 文件已还原。 更改的文件 Copilot 将还原到所选提示之前的状态。 当前内容不再与上次写入的内容 Copilot 相匹配的文件(例如,因为你自己编辑了它们),因此不会覆盖以后的编辑。
  2. 会话历史记录将被截断。 对话将重新移动到所选点。 从会话中删除在该点之后发生的所有消息和工具调用。
  3. 已删除过时的快照。 已清除已放弃轮次的捕获文件更改。 早期点仍可用于未来的倒退。
  4. 回滚已确认。 回滚后, Copilot 显示一条消息,指示已还原的文件数,并记录跳过的任何文件。
  5. 你的提示已恢复。 与所选点关联的提示放置在输入区域中,以便可以编辑并重新提交它。

如果选择仅回退对话,则文件保持不变:会话历史记录被截断(步骤 2),提示将还原到输入区域(步骤 5)。

无法回滚的更改

在以下情况下,将跳过文件还原或不可用:

  • 文件超过 10 MB。 捕获期间会跳过大于 10 MB 的单个文件,因此在回滚期间不会还原对这些文件的更改。
  • 超过 500 个已更改的文件。 如果在单个轮次期间更改了 500 多个文件,则不会捕获该轮次的文件更改,因此无法还原文件。 其他轮次不受影响。
  • 你自己更改的文件。 当前内容不再与上次写入的内容匹配 Copilot 的文件保持不变,而不是被覆盖。
  • 没有文件跟踪的会话。 如果在启用文件更改跟踪之前恢复启动的会话,则只有对话回退可用。 启动一个新会话,以便能够还原文件更改。
  • 远程支持的或繁忙的会话。 Rewind 不适用于远程支持的会话,或者会话仍在进行中。

延伸阅读