Appearance
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 会执行完整回滚:
- 恢复 Git 状态(包括提交历史)
- 清除未跟踪的新文件
- 恢复被修改的文件到快照状态
- 截断后续的会话历史记录
- 删除该时间点之后创建的快照
- 还原当前的提示词输入框
注意:回滚会恢复你之前手动做的修改,不只是 Copilot 的修改。选择回滚前确认你不需要保留回滚点之后的任何变更。
回滚限制
以下情况可能无法完整回滚:
| 限制 | 说明 |
|---|---|
| 单文件超过 10 MB | 该文件可能未被纳入快照 |
| 修改文件数超过 500 个 | 超出限制的文件无法回滚 |
在 Autopilot 模式下的重要性
Autopilot 模式(--autopilot)会让 Copilot 自主执行多个步骤。如果结果不符合预期,快照回滚是最便捷的"撤销"方法:
- 按两次
Esc打开快照列表 - 选择 Autopilot 开始执行之前的时间点
- 确认回滚,Copilot 会将工作区恢复到那一刻
这避免了手动 git reset 或逐文件还原的繁琐操作。
与 Git 的关系
快照回滚会还原 Git 状态,这意味着:
- 使用
--allow-all让 Copilot 执行了git commit?回滚可以撤销这些提交。 - 但如果你已经
git push到远程仓库,快照只能恢复本地状态,不会撤销远程的 push。
建议在允许 Copilot 执行 push 操作前,始终手动确认。
常见问题
Q: 关掉终端再重新打开,快照还在吗?
A: 快照存储在本地(~/.copilot/session-state/ 相关目录),重启终端后通常仍然可以访问。但会话截断后,之前的快照列表可能不完整。
Q: 如何确认 Copilot 对哪些文件做了修改?
A: 在回滚之前,可以先用 git diff 和 git status 查看所有变更,再决定是否需要回滚到某个快照。
Q: 回滚和 git stash / git reset 有什么区别?
A: Copilot 快照回滚是针对整个工作区的一键恢复,包括 Git 历史、文件内容、未跟踪文件等全部内容。git stash 只保存工作区修改,git reset 只操作提交历史。快照回滚更全面,适合"完全撤销这次 AI 操作"的场景。