Skip to content

Copilot CLI 提供了两套取消机制:Ctrl+C 立即终止当前操作,Esc 提供更细粒度的控制(清除输入、取消对话、弹出回滚选项)。当连续按两次 Esc 时,可以将整个工作区回滚到之前的快照状态,撤销 AI 的所有修改——这是 Autopilot 模式下的重要安全网。

GitHub Copilot CLI 撤销与回滚:Ctrl+C、Esc 和快照恢复指南

两种取消方式

Ctrl+C:立即终止

Ctrl+C立即停止当前正在执行的操作,不保留中间状态。

适合:

  • 操作明显跑偏,需要立刻停止
  • Copilot 陷入循环,需要强制中断

注意:Ctrl+C 不会回滚已经完成的文件修改。

Esc:分级控制

Esc 的行为取决于当前状态:

当前状态按 Esc 的效果
输入框有内容清空输入内容
有排队中的提示词清除队列中的待执行提示
Copilot 正在执行操作分阶段取消当前操作
输入框为空 + Copilot 空闲第一次:等待;第二次:弹出工作区快照列表

工作区快照与回滚

当输入框为空且 Copilot 处于空闲状态时,连按两次 Esc 会弹出之前的工作区快照列表。

快照的工作原理

Copilot CLI 在关键操作前会自动保存工作区快照,记录:

  • Git 状态(提交历史、暂存区、工作区)
  • 所有已修改的文件内容

回滚操作

从快照列表中选择一个时间点后,Copilot 会执行完整回滚:

  1. 恢复 Git 状态(包括提交历史)
  2. 清除未跟踪的新文件
  3. 恢复被修改的文件到快照状态
  4. 截断后续的会话历史记录
  5. 删除该时间点之后创建的快照
  6. 还原当前的提示词输入框

注意:回滚会恢复你之前手动做的修改,不只是 Copilot 的修改。选择回滚前确认你不需要保留回滚点之后的任何变更。

回滚限制

以下情况可能无法完整回滚:

限制说明
单文件超过 10 MB该文件可能未被纳入快照
修改文件数超过 500 个超出限制的文件无法回滚

在 Autopilot 模式下的重要性

Autopilot 模式(--autopilot)会让 Copilot 自主执行多个步骤。如果结果不符合预期,快照回滚是最便捷的"撤销"方法:

  1. 按两次 Esc 打开快照列表
  2. 选择 Autopilot 开始执行之前的时间点
  3. 确认回滚,Copilot 会将工作区恢复到那一刻

这避免了手动 git reset 或逐文件还原的繁琐操作。

与 Git 的关系

快照回滚会还原 Git 状态,这意味着:

  • 使用 --allow-all 让 Copilot 执行了 git commit?回滚可以撤销这些提交。
  • 但如果你已经 git push 到远程仓库,快照只能恢复本地状态,不会撤销远程的 push

建议在允许 Copilot 执行 push 操作前,始终手动确认。

常见问题

Q: 关掉终端再重新打开,快照还在吗?

A: 快照存储在本地(~/.copilot/session-state/ 相关目录),重启终端后通常仍然可以访问。但会话截断后,之前的快照列表可能不完整。

Q: 如何确认 Copilot 对哪些文件做了修改?

A: 在回滚之前,可以先用 git diffgit status 查看所有变更,再决定是否需要回滚到某个快照。

Q: 回滚和 git stash / git reset 有什么区别?

A: Copilot 快照回滚是针对整个工作区的一键恢复,包括 Git 历史、文件内容、未跟踪文件等全部内容。git stash 只保存工作区修改,git reset 只操作提交历史。快照回滚更全面,适合"完全撤销这次 AI 操作"的场景。