---
name: Git Rollback
slug: git-rollback-2
category: DevOps
description: Git Rollback interactively rolls back a Git branch to a historical version by listing branches and commits, previewing commands with a dry-run default, then executing reset or revert after confirmation. Use it to safely undo hotfixes, revert bad commits, or inspect branch history before changing state.
github: "https://github.com/UfoMiao/zcf/tree/main/templates/skills/zh-CN/git-rollback"
language: TypeScript
stars: 6076
forks: 424
install: "npx degit https://github.com/UfoMiao/zcf/tree/main/templates/skills/zh-CN/git-rollback ~/.claude/skills/git-rollback"
installs_to: ~/.claude/skills/git-rollback
source_path: templates/skills/zh-CN/git-rollback/SKILL.md
collection_size: 20
category_size: 798
collection_url: "https://dirskills.com/collections/UfoMiao/zcf"
added: 2026-08-15T06:52:19.060Z
last_synced: 2026-08-15T06:52:19.060Z
canonical_url: "https://dirskills.com/skills/git-rollback-2"
---

# Git Rollback

Git Rollback interactively rolls back a Git branch to a historical version by listing branches and commits, previewing commands with a dry-run default, then executing reset or revert after confirmation. Use it to safely undo hotfixes, revert bad commits, or inspect branch history before changing state.

**Install:**

```bash
npx degit https://github.com/UfoMiao/zcf/tree/main/templates/skills/zh-CN/git-rollback ~/.claude/skills/git-rollback
```

## README

# Claude Command: Git Rollback

**目的**：安全、可视地将指定分支回滚到旧版本。
默认处于 **只读预览 (`--dry-run`)**；真正执行需加 `--yes` 或在交互中确认。

---

## Usage

```bash
# 纯交互：列出分支 → 选分支 → 列最近 20 个版本 → 选目标 → 选择 reset 或 revert → 二次确认
/git-rollback

# 指定分支，其他交互
/git-rollback --branch feature/calculator

# 指定分支与目标 commit，并用 hard‑reset 一键执行（危险）
/git-rollback --branch main --target 1a2b3c4d --mode reset --yes

# 只想生成 revert 提交（非破坏式回滚），预览即可
/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 脚本。                                            |

---

## 交互流程

1. **同步远端** → `git fetch --all --prune`
2. **列分支** → `git branch -a`（本地＋远端，过滤受保护分支）
3. **选分支** → 用户输入或传参
4. **列版本** → `git log --oneline -n <depth>` + `git tag --merged` + `git reflog -n <depth>`
5. **选目标** → 用户输入 commit hash / tag
6. **选模式** → `reset` 或 `revert`
7. **最终确认** （除非 `--yes`）
8. **执行回滚**
   - `reset`：`git switch <branch> && git reset --hard <target>`
   - `revert`：`git switch <branch> && git revert --no-edit <target>..HEAD`
9. **推送建议** → 提示是否 `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）                              |

---

## 注意

1. **reset vs revert**
   - **reset** 会改变历史，需要强推并可能影响其他协作者，谨慎使用。
   - **revert** 更安全，生成新提交保留历史，但会增加一次记录。
2. **嵌入式仓库** 常有大体积二进制文件；回滚前请确保 LFS/子模块状态一致。
3. 若仓库启用了 CI 强制校验，回滚后可能自动触发流水线；确认管控策略以免误部署旧版本。

---
