# repostack restore

> 

将各 repo 恢复到 `repostack.lock.yaml` 记录的精确 revision。

```bash
repostack restore
repostack restore --yes
```

## 选项

| 选项          | 说明           |
| ----------- | ------------ |
| `-y, --yes` | 跳过未提交修改的确认提示 |

## 执行流程

<steps level="4">

#### **加载配置**- 读取 `repostack.yaml` 和 `.repostackrc`。





#### **下载缺失 repo**- 复用 `pull` 的逻辑 clone 本地缺失的 repo。





#### **读取 lock 文件**- 读取 `repostack.lock.yaml`。
- 如果 lock 文件包含 `checksum`，会先进行 SHA-256 校验。





#### **对每个 repo 执行恢复**- 运行 `git fetch --all --tags` 更新远程引用。
- 如果 lock 文件中存在该 repo 的 `revision`，执行 `git checkout <revision>`。
- 如果 revision 是 `"(no commits)"`，跳过 checkout。





#### **重写 lock 文件**- 根据恢复后的实际状态重新生成 `repostack.lock.yaml`。





</steps>

## Git 操作

- `git clone`（缺失 repo）
- `git fetch --all --tags`（每个 repo）
- `git checkout <revision>`（恢复到 lock revision）
- `git rev-parse --abbrev-ref HEAD` 和 `git rev-parse HEAD`（重写 snapshot）

## 适用场景

- 切换 stack root 的 Git 分支后恢复特定版本组合
- 复现同事或 CI 记录的问题现场
- 回到某个已提交的 stack 快照

## 示例

```bash
git checkout <stack-root-commit>
repostack restore
```
