Skip to content

Checkpointing 为 Kiro CLI 会话提供类似 Git 的临时快照。本文解释它如何通过 shadow git repo 跟踪文件改动,如何查看、比较和恢复 checkpoint,以及 soft restore 与 hard restore 的区别,帮助你在重构、试验和排障时安全回退。

Kiro CLI Experimental Checkpointing:安全回滚会话中的文件改动

Checkpointing 是 Kiro CLI 的会话级文件快照能力。你可以把它理解成“只服务于当前聊天会话的临时 Git”:Kiro 会在背后创建一个 shadow bare git repository,用来记录当前会话中每一轮文件变更。需要时,你可以查看 checkpoint、比较差异,或者恢复到某个已知状态。

它不替代项目自己的 Git,也不会直接改写你的真实 Git 仓库历史。它的价值在于:当你和 Kiro 试验多个实现方案、做复杂重构或排查错误时,可以更低成本地回到前面的工作点。

启用 checkpointing

使用 settings 启用:

bash
kiro-cli settings chat.enableCheckpoint true

也可以在会话中打开实验功能菜单:

bash
/experiment

然后从列表里选择 Checkpointing。

它是怎么工作的?

自动初始化

  • 在 Git 仓库中:启动聊天会话后会自动启用。
  • 在非 Git 目录中:需要手动执行 /checkpoint init
  • 作用范围:checkpoint 只属于当前会话,通常会在会话结束后清理。

Shadow repository

Checkpointing 会创建一个临时的 bare git repo。它负责:

  • 跟踪当前会话中发生的文件改动。
  • 为每一轮对话或工具操作保存快照。
  • 支持比较不同文件状态。
  • 支持恢复到某个 checkpoint。
  • 会话结束后自动清理,避免长期占用空间。

这个 shadow repo 不等于你的项目 .git,因此不会创建真实 commit,也不会影响远程仓库。

常用命令

/checkpoint init

在非 Git 目录中手动初始化 checkpointing:

bash
/checkpoint init

如果你在 Git 仓库里工作,通常不需要手动执行这一步。

/checkpoint list

查看当前会话的 turn-level checkpoints,并显示文件统计信息:

bash
/checkpoint list [--limit N]

示例输出:

text
[0] 2025-09-18 14:00:00 - Initial checkpoint
[1] 2025-09-18 14:05:31 - add two_sum.py (+1 file)
[2] 2025-09-18 14:07:10 - add tests (modified 1)
[3] 2025-09-18 14:10:45 - refactor algorithm (modified 1)

建议在长任务中定期运行它,确认当前会话已经记录了哪些关键节点。

/checkpoint expand

查看某个 turn 下面更细的 tool-level checkpoints:

bash
/checkpoint expand <tag>

示例:

text
> /checkpoint expand 2

[2] 2025-09-18 14:07:10 - add tests
 └─ [2.1] write: Add minimal test cases to two_sum.py (modified 1)

当一个 turn 内部包含多次文件写入时,expand 可以帮你定位具体是哪一步产生了改动。

/checkpoint diff

比较两个 checkpoint,或把某个 checkpoint 与当前工作区比较:

bash
/checkpoint diff <tag1> [tag2|HEAD]

示例:

bash
/checkpoint diff 1 2        # 比较 checkpoint 1 和 checkpoint 2
/checkpoint diff 1 HEAD     # 比较 checkpoint 1 和当前状态
/checkpoint diff 1          # 等同于和 HEAD 比较

如果你让 Kiro 生成了两个不同实现方案,可以用 diff 直接比较差异,而不是凭记忆判断。

/checkpoint restore

恢复到某个 checkpoint:

bash
/checkpoint restore [<tag>] [--hard]

如果不传 tag,Kiro 会显示交互式选择器。

示例:

bash
/checkpoint restore 2        # soft restore 到 checkpoint 2
/checkpoint restore 2 --hard # hard restore 到 checkpoint 2
/checkpoint restore          # 交互式选择

恢复时,对话历史也会回退到对应 checkpoint,保证 Kiro 的上下文理解与文件状态一致。

/checkpoint clean

删除当前会话的 shadow repository:

bash
/checkpoint clean

注意:这会删除当前会话里的所有 checkpoint 数据,执行前请确认不再需要回退。

Soft restore 与 hard restore 的区别

默认恢复:soft restore

bash
/checkpoint restore 2

它会:

  • 把已跟踪的修改恢复到 checkpoint 状态。
  • 恢复在 checkpoint 后被删除的文件。
  • 保留 checkpoint 之后新创建的文件。

适合:

  • 想撤销某些修改,但保留新写出来的文件。
  • 在多个实现方案之间切换。
  • 回退具体修改,而不是完全清空后续工作。

强制恢复:hard restore

bash
/checkpoint restore 2 --hard

它会让工作区尽量精确匹配 checkpoint:

  • 修改过的文件恢复到 checkpoint 状态。
  • 删除过的文件被恢复。
  • checkpoint 之后新增的已跟踪文件会被删除。

适合:

  • 确认要完全放弃近期改动。
  • 想从某个干净状态重新开始。
  • 当前工作区已经明显跑偏,需要彻底回退。

请谨慎使用 --hard,因为它可能永久删除文件。

典型使用场景

试验不同重构方案

text
> Help me refactor this function

# Kiro 做了一版修改

> /checkpoint list
[0] Initial checkpoint
[1] Refactored function (modified 1)

> Actually, let's try a different approach

> /checkpoint restore 0
# 回到原始状态

> Now try using a different pattern...

这种方式适合“先试试看”的工作。你不用提前手动复制文件,也不用担心试验失败后难以回滚。

比较两个实现

text
> Implement feature A

# 第一版实现完成

> /checkpoint list
[1] Implemented feature A (modified 2)

> Now show me an alternative implementation

# 第二版实现完成

> /checkpoint list
[2] Alternative implementation (modified 2)

> /checkpoint diff 1 2
# 查看两种方案的差异

在做架构选择或性能优化时,diff 比口头描述更可靠。

追踪任务进度

text
> /checkpoint list
[0] Initial state
[1] Added user model (+1 file)
[2] Added authentication (+2 files)
[3] Added tests (modified 3)

> /checkpoint expand 2
[2] Added authentication
 └─ [2.1] write: Create auth.py (+1 file)
 └─ [2.2] write: Update routes.py (modified 1)

这能帮你复盘 Kiro 在每个阶段改了哪些文件,也方便定位问题从哪一步引入。

从错误尝试中恢复

text
> /checkpoint list
[0] Working code
[1] Attempted optimization (modified 1)
[2] More changes (modified 2)

# 发现优化引入问题

> /checkpoint restore 0
# 回到可工作的状态

对“优化后反而坏了”的场景,checkpointing 很实用。

对话历史也会回退

Checkpointing 不只恢复文件,还会把 conversation history 回退到对应 checkpoint。这样做是为了避免文件已经恢复,但 Kiro 的上下文仍然记着后续错误尝试,导致它继续基于错误假设回答。

恢复后会发生:

  • checkpoint 之后的消息从上下文中移除。
  • Kiro 的理解回到当时状态。
  • 文件状态和对话状态保持一致。

最佳实践

什么时候应该用?

  • 实验性改动:想安全试多个方案。
  • 复杂重构:每一步都希望可回退。
  • 学习和对比:想比较不同实现方式。
  • Debug:想确认问题是在哪个阶段引入的。

如何管理 checkpoint?

  • 经常用 /checkpoint list 查看进度。
  • 在关键节点后确认 checkpoint 已记录。
  • /checkpoint diff 做方案比较。
  • 只有非常确定时才使用 --hard
  • 任务结束后用 /checkpoint clean 清理 shadow repo。

限制与注意事项

会话范围限制

  • Checkpoints 只存在于当前会话。
  • Shadow repository 通常在会话结束后清理。
  • 不能跨会话共享 checkpoint。

文件追踪限制

  • 只跟踪会话中修改过的文件。
  • 不跟踪工作目录之外的文件。
  • 二进制文件可被记录,但 diff 结果通常不够有用。

性能限制

  • 大文件可能拖慢 checkpoint 操作。
  • checkpoint 太多会占用更多磁盘空间。
  • 大范围 diff 可能比较慢。

常见排障

Checkpointing 不工作怎么办?

先确认开关:

bash
kiro-cli settings chat.enableCheckpoint

如果当前目录不是 Git 仓库,再手动初始化:

bash
/checkpoint init

同时留意聊天输出中是否有权限或路径相关错误。

无法恢复 checkpoint 怎么办?

先确认 checkpoint 存在:

bash
/checkpoint list

然后检查文件是否有写入权限。建议优先尝试默认的 soft restore,确认无误后再考虑 --hard

Shadow repository 似乎损坏了怎么办?

可以清理后重新初始化:

bash
/checkpoint clean
/checkpoint init

如果仍然异常,开启新会话通常是最直接的恢复方式。

相关功能

常见问题

Checkpointing 会替代 Git 吗?

不会。它只是在当前 Kiro CLI 会话中提供临时快照,不会替代真实 commit、branch、stash 或代码评审流程。

使用 restore 会不会影响对话上下文?

会。恢复到 checkpoint 时,对话历史也会回退到对应位置,这是为了让文件状态和 Kiro 的上下文保持一致。

什么时候不该用 --hard

只要你还不确定 checkpoint 之后新增的文件是否有价值,就不要用 --hard。默认 soft restore 更安全,适合作为第一选择。