| name | git-rollback |
| description | 交互式回滚 Git 分支到历史版本;列分支、列版本、二次确认后执行 reset / revert |
| disable-model-invocation | true |
| allowed-tools | Read(**), Exec(git fetch, git branch, git tag, git log, git reflog, git checkout, git reset, git revert, git switch), Write() |
Claude Command: Git Rollback
目的:安全、可视地将指定分支回滚到旧版本。
默认处于 只读预览 (--dry-run);真正执行需加 --yes 或在交互中确认。
Usage
/git-rollback
/git-rollback --branch feature/calculator
/git-rollback --branch main --target 1a2b3c4d --mode reset --yes
/git-rollback --branch release/v2.1 --target v2.0.5 --mode revert --dry-run
Options
| 选项 | 说明 |
|---|
--branch <branch> | 要回滚的分支;缺省时交互选择。 |
--target <rev> | 目标版本(commit Hash、Tag、reflog 引用都行);缺省时交互选择近 --depth 条记录。 |
--mode reset|revert | reset:硬回滚历史;revert:生成反向提交保持历史完整。默认询问。 |
--depth <n> | 在交互模式下列出最近 n 个版本(默认 20)。 |
--dry-run | 默认开启,只预览即将执行的命令。 |
--yes | 跳过所有确认直接执行,适合 CI/CD 脚本。 |
交互流程
- 同步远端 →
git fetch --all --prune
- 列分支 →
git branch -a(本地+远端,过滤受保护分支)
- 选分支 → 用户输入或传参
- 列版本 →
git log --oneline -n <depth> + git tag --merged + git reflog -n <depth>
- 选目标 → 用户输入 commit hash / tag
- 选模式 →
reset 或 revert
- 最终确认 (除非
--yes)
- 执行回滚
reset:git switch <branch> && git reset --hard <target>
revert:git switch <branch> && git revert --no-edit <target>..HEAD
- 推送建议 → 提示是否
git push --force-with-lease(reset)或普通 git push(revert)
安全护栏
- 备份:执行前自动在 reflog 中记录当前 HEAD,可用
git switch -c backup/<timestamp> 恢复。
- 保护分支:如检测到
main / master / production 等受保护分支且开启 reset 模式,将要求额外确认。
- --dry-run 默认开启:防止误操作。
- --force 禁止:不提供
--force;如需强推,请手动输入 git push --force-with-lease。
适用场景示例
| 场景 | 调用示例 |
|---|
热修补丁上线后发现 bug,需要回到 Tag v1.2.0 | /git-rollback --branch release/v1 --target v1.2.0 --mode reset |
| 运维同事误推了 debug 日志提交,需要生成反向提交 | /git-rollback --branch main --target 3f2e7c9 --mode revert |
| 调研历史 bug,引导新人浏览分支历史 | /git-rollback (全交互,dry‑run) |
注意
- reset vs revert
- reset 会改变历史,需要强推并可能影响其他协作者,谨慎使用。
- revert 更安全,生成新提交保留历史,但会增加一次记录。
- 嵌入式仓库 常有大体积二进制文件;回滚前请确保 LFS/子模块状态一致。
- 若仓库启用了 CI 强制校验,回滚后可能自动触发流水线;确认管控策略以免误部署旧版本。