smart-revert
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSmart Revert
智能撤销
Git-aware intelligent revert system for reverting logical work units (tracks, phases, tasks) while handling complex Git histories.
一款感知Git的智能撤销系统,可针对逻辑工作单元(工作流、阶段、任务)执行撤销操作,同时能处理复杂的Git提交历史。
When to Use
适用场景
- Reverting completed tasks that need to be redone
- Rolling back entire phases that didn't meet requirements
- Undoing track changes after failed review
- Recovering from implementation mistakes
- Cleaning up after interrupted work
- 撤销需要重做的已完成任务
- 回滚未达要求的整个阶段
- 在审核不通过后撤销工作流(track)变更
- 从实现错误中恢复
- 清理中断的工作内容
Core Concepts
核心概念
Logical vs Physical Revert
逻辑撤销 vs 物理撤销
| Type | Description | Example |
|---|---|---|
| Logical | Revert a track/phase/task as defined in plan.md | "Revert Task 2.1" |
| Physical | Revert specific Git commits | "Revert commit abc1234" |
This skill bridges the gap: given a logical target, it finds all physical commits.
| 类型 | 描述 | 示例 |
|---|---|---|
| 逻辑撤销 | 按照plan.md中的定义撤销工作流/阶段/任务 | "撤销任务2.1" |
| 物理撤销 | 撤销特定的Git提交 | "撤销提交abc1234" |
本工具填补了两者之间的空白:给定一个逻辑目标,它会自动查找所有相关的物理提交。
4-Phase Protocol
四阶段流程
Phase 1: Interactive Target Selection
阶段1:交互式目标选择
- Check for explicit target: Did user specify what to revert?
- If no target: Present guided menu of candidates:
- First: In-progress items ()
[~] - Fallback: Recently completed items ()
[x]
- First: In-progress items (
- Confirm intent: Verify understanding before proceeding
Menu Format:
I found the following items to potentially revert:
Track: user-auth_20250115
1) [Phase] Phase 2: Core Logic
2) [Task] Task 2.1: Implement validation
3) A different Track, Task, or Phase
Which would you like to revert?- 检查明确目标:用户是否指定了要撤销的内容?
- 若无目标:提供候选内容的引导菜单:
- 优先:进行中的项目()
[~] - 备选:最近完成的项目()
[x]
- 优先:进行中的项目(
- 确认意图:在执行前验证理解是否正确
菜单格式:
I found the following items to potentially revert:
Track: user-auth_20250115
1) [Phase] Phase 2: Core Logic
2) [Task] Task 2.1: Implement validation
3) A different Track, Task, or Phase
Which would you like to revert?Phase 2: Git Reconciliation
阶段2:Git协调
Goal: Find ALL commits related to the logical unit.
-
Find implementation commits:
- Extract SHAs from plan.md (abc1234``)
[x] Task: Description \ - Handle "ghost commits" (rebased/squashed)
- Extract SHAs from plan.md (
-
Find plan-update commits:
- For each implementation SHA, find the following plan.md update
-
Find track creation commit (if reverting entire track):
- Search git log for when track entry was added to tracks.md
Handling Ghost Commits:
SHA abc1234 from plan.md not found in git history.
This may have been rewritten by rebase/squash.
Searching for similar commits...
Found: def5678 "feat(user): implement validation"
Is this the correct commit? (yes/no)目标:找到与逻辑单元相关的所有提交。
-
查找实现提交:
- 从plan.md中提取SHA值(格式:abc1234\``)
[x] Task: Description \\ - 处理“幽灵提交”(已变基/合并压缩的提交)
- 从plan.md中提取SHA值(格式:
-
查找计划更新提交:
- 针对每个实现提交的SHA,查找对应的plan.md更新提交
-
查找工作流创建提交(若撤销整个工作流):
- 在Git日志中搜索track条目被添加到tracks.md的时间点
处理幽灵提交:
SHA abc1234 from plan.md not found in git history.
This may have been rewritten by rebase/squash.
Searching for similar commits...
Found: def5678 "feat(user): implement validation"
Is this the correct commit? (yes/no)Phase 3: Execution Plan Confirmation
阶段3:执行计划确认
Present clear summary before any action:
undefined在执行任何操作前,展示清晰的摘要:
undefinedRevert Execution Plan
Revert Execution Plan
Target: Task 2.1 "Implement user validation"
Commits to Revert: 2
- - "feat(user): implement validation"
abc1234 - - "conductor(plan): mark task 2.1 complete"
def5678
Action: Run on each commit (newest first)
git revert --no-editDo you want to proceed?
A) Yes - execute the revert
B) No - cancel and review
undefinedTarget: Task 2.1 "Implement user validation"
Commits to Revert: 2
- - "feat(user): implement validation"
abc1234 - - "conductor(plan): mark task 2.1 complete"
def5678
Action: Run on each commit (newest first)
git revert --no-editDo you want to proceed?
A) Yes - execute the revert
B) No - cancel and review
undefinedPhase 4: Execution & Verification
阶段4:执行与验证
-
Execute reverts (newest to oldest):bash
git revert --no-edit <sha> -
Handle conflicts: If conflict occurs, provide guidance:
Merge conflict detected. Please resolve manually: 1. Edit conflicted files 2. Run: git add . 3. Run: git revert --continue -
Verify plan state: Re-read plan.md to confirm status reset
-
Announce completion: Confirm revert succeeded
-
执行撤销操作(从最新提交到最早提交):bash
git revert --no-edit <sha> -
处理冲突:若发生冲突,提供指导:
Merge conflict detected. Please resolve manually: 1. Edit conflicted files 2. Run: git add . 3. Run: git revert --continue -
验证计划状态:重新读取plan.md以确认状态已重置
-
完成通知:确认撤销操作成功
Commit Identification Strategies
提交识别策略
Finding Implementation Commits
查找实现提交
bash
undefinedbash
undefinedExtract SHA from plan.md
Extract SHA from plan.md
grep -oP '[x].*`\K[a-f0-9]{7}' plan.md
grep -oP '\[x\].*`\K[a-f0-9]{7}' plan.md
Verify SHA exists
Verify SHA exists
git cat-file -t <sha>
undefinedgit cat-file -t <sha>
undefinedFinding Plan Update Commits
查找计划更新提交
bash
undefinedbash
undefinedFind commits that modified plan.md after implementation
Find commits that modified plan.md after implementation
git log --oneline -- path/to/plan.md | head -5
undefinedgit log --oneline -- path/to/plan.md | head -5
undefinedHandling Rebased History
处理变基后的历史
bash
undefinedbash
undefinedSearch by commit message similarity
Search by commit message similarity
git log --oneline --all | grep -i "implement validation"
git log --oneline --all | grep -i "implement validation"
Search by file changes
Search by file changes
git log --oneline --all -- src/models/user.py
undefinedgit log --oneline --all -- src/models/user.py
undefinedFinding Track Creation
查找工作流创建记录
bash
undefinedbash
undefinedFind when track was added to registry
Find when track was added to registry
git log -p -- conductor/tracks.md | grep -B5 "Track: user-auth"
undefinedgit log -p -- conductor/tracks.md | grep -B5 "Track: user-auth"
undefinedSafety Features
安全特性
Multiple Confirmation Gates
多重确认机制
| Gate | Purpose | When |
|---|---|---|
| Target confirmation | Verify correct item selected | After selection |
| Execution plan review | Show exactly what will happen | Before any git operation |
| Final go/no-go | Last chance to cancel | Immediately before revert |
| 确认环节 | 目的 | 触发时机 |
|---|---|---|
| 目标确认 | 验证选择的项目是否正确 | 选择目标后 |
| 执行计划审核 | 明确展示即将执行的操作 | 任何Git操作执行前 |
| 最终确认 | 最后一次取消机会 | 即将执行撤销操作前 |
Conflict Handling
冲突处理
If fails:
git revert- Do NOT force or continue automatically
- Explain what happened
- Provide manual resolution steps
- Offer to help after user resolves
若执行失败:
git revert- 请勿强制继续或自动执行
- 解释发生的问题
- 提供手动解决步骤
- 主动协助用户解决后的后续操作
Post-Revert Verification
撤销后验证
Always verify the plan file reflects the revert:
markdown
Before: [x] Task 2.1: Implement validation `abc1234`
After: [ ] Task 2.1: Implement validationIf plan state is inconsistent, offer to fix it.
始终验证计划文件是否反映了撤销结果:
markdown
Before: [x] Task 2.1: Implement validation `abc1234`
After: [ ] Task 2.1: Implement validation若计划状态不一致,主动提出修复。
Example Scenarios
示例场景
Scenario 1: Revert Single Task
场景1:撤销单个任务
User: "Revert the last task I completed"
Agent:
1. Read plan.md, find most recent [x] task
2. Extract SHA: abc1234
3. Find plan-update commit: def5678
4. Present: "Revert Task 2.1? Will undo abc1234, def5678"
5. User confirms
6. Execute: git revert --no-edit def5678 && git revert --no-edit abc1234
7. Verify plan.md shows [ ] for task
8. Report successUser: "Revert the last task I completed"
Agent:
1. Read plan.md, find most recent [x] task
2. Extract SHA: abc1234
3. Find plan-update commit: def5678
4. Present: "Revert Task 2.1? Will undo abc1234, def5678"
5. User confirms
6. Execute: git revert --no-edit def5678 && git revert --no-edit abc1234
7. Verify plan.md shows [ ] for task
8. Report successScenario 2: Revert Entire Phase
场景2:撤销整个阶段
User: "/smart-revert phase 2"
Agent:
1. Find all tasks in Phase 2 with [x] status
2. Collect all implementation SHAs
3. Collect all plan-update SHAs
4. Find phase checkpoint SHA
5. Present comprehensive plan
6. User confirms
7. Execute reverts in reverse order
8. Verify all Phase 2 tasks show [ ]
9. Report successUser: "/smart-revert phase 2"
Agent:
1. Find all tasks in Phase 2 with [x] status
2. Collect all implementation SHAs
3. Collect all plan-update SHAs
4. Find phase checkpoint SHA
5. Present comprehensive plan
6. User confirms
7. Execute reverts in reverse order
8. Verify all Phase 2 tasks show [ ]
9. Report successScenario 3: Handle Ghost Commit
场景3:处理幽灵提交
Agent: "Looking for SHA abc1234..."
Agent: "SHA not found. Checking for rebased commits..."
Agent: "Found similar commit def5678: 'feat(user): validation'"
Agent: "Is def5678 the correct replacement? (yes/no)"
User: "yes"
Agent: [continues with def5678]Agent: "Looking for SHA abc1234..."
Agent: "SHA not found. Checking for rebased commits..."
Agent: "Found similar commit def5678: 'feat(user): validation'"
Agent: "Is def5678 the correct replacement? (yes/no)"
User: "yes"
Agent: [continues with def5678]Integration Points
集成点
With track-management
与track-management集成
Read plan.md and tracks.md to understand work structure.
读取plan.md和tracks.md以理解工作结构。
With workflow-patterns
与workflow-patterns集成
Follow established commit conventions when creating revert commits.
在创建撤销提交时遵循既定的提交规范。
With context-driven-development
与context-driven-development集成
Update context files if revert affects product features.
若撤销操作影响产品功能,更新上下文文件。
Anti-Patterns
反模式
Do NOT:
请勿:
- Revert without confirmation
- Ignore ghost commits (fail silently)
- Leave plan.md in inconsistent state
- Force-push after revert
- Revert merge commits without special handling
- 未经确认直接执行撤销
- 忽略幽灵提交(静默失败)
- 让plan.md处于不一致状态
- 撤销后强制推送
- 不做特殊处理就撤销合并提交
Do:
请:
- Always verify target before action
- Handle rewritten history gracefully
- Verify plan state after revert
- Provide clear conflict resolution guidance
- Document what was reverted in commit message
- 执行操作前始终验证目标
- 优雅处理重写的提交历史
- 撤销后验证计划状态
- 提供清晰的冲突解决指导
- 在提交信息中记录撤销内容
Integration with Git Notes (Enhanced - Phase 1.5)
与Git Notes集成(增强版 - 阶段1.5)
Logical Unit Identification
逻辑单元识别
Instead of asking "Which commits?", ask "Which feature/bug?"
Old Workflow:
- User: "Revert commit abc123"
- Agent: Runs
git revert abc123
New Workflow (Git Notes-Based):
- User: "Revert the dark mode feature"
- Agent:
- Search git notes for "dark mode" or feature ID
- Find all related commits via
logical-unit-tracker.cjs - Show: "Revert these commits? [A, B, C]"
- User: "Yes"
- Execute: (reverse order)
git revert -n C B A - Result: Feature cleanly reverted
不再询问“哪些提交?”,而是询问“哪个功能/BUG?”
旧工作流:
- 用户:“撤销提交abc123”
- 工具:执行
git revert abc123
新工作流(基于Git Notes):
- 用户:“撤销深色模式功能”
- 工具:
- 在Git Notes中搜索“深色模式”或功能ID
- 通过查找所有相关提交
logical-unit-tracker.cjs - 展示:“是否撤销这些提交?[A, B, C]”
- 用户:“是”
- 执行:(逆序)
git revert -n C B A - 结果:功能被干净地撤销
How It Works
工作原理
- Find Unit: Invoke to group commits by task
logical-unit-tracker.cjs - Show Options: List tasks with commit count
- Task #6: Dark Mode (2 commits)
- Task #7: Button Refactor (3 commits)
- Confirm: User selects task to revert
- Check Dependencies: Warn if other tasks depend on this
- Execute: Revert all commits for task (reverse order)
- Verify: Show revert result and update git notes
- 查找单元:调用按任务分组提交
logical-unit-tracker.cjs - 展示选项:列出带提交数量的任务
- 任务#6:深色模式(2个提交)
- 任务#7:按钮重构(3个提交)
- 确认:用户选择要撤销的任务
- 检查依赖:若其他任务依赖当前任务,发出警告
- 执行:逆序撤销任务的所有提交
- 验证:展示撤销结果并更新Git Notes
Logical Unit Tracker API
逻辑单元追踪器API
javascript
const logicalUnitTracker = require('./.claude/lib/utils/logical-unit-tracker.cjs');
// Group commits by task ID from git notes
const groups = await logicalUnitTracker.groupByTask(repoPath, 'HEAD~10..HEAD');
// Returns: { "6": [{hash, message, note}], "7": [{...}] }
// Find dependencies
const deps = await logicalUnitTracker.findDependencies(repoPath, '7', { transitive: true });
// Returns: ["6"] if Task #7 depends on Task #6
// Check safety before reverting
const safety = await logicalUnitTracker.checkRevertSafety(repoPath, '6');
// Returns: { safe: boolean, blockers: [], warning: string }
// Execute revert for entire task
const result = await logicalUnitTracker.revertTask(repoPath, '6');
// Returns: { success: boolean, conflicts: boolean, message: string }
// Find task by name
const tasks = await logicalUnitTracker.findTaskByName(repoPath, 'Dark Mode');
// Returns: ["6"] if Task #6 has "Dark Mode" in notesjavascript
const logicalUnitTracker = require('./.claude/lib/utils/logical-unit-tracker.cjs');
// Group commits by task ID from git notes
const groups = await logicalUnitTracker.groupByTask(repoPath, 'HEAD~10..HEAD');
// Returns: { "6": [{hash, message, note}], "7": [{...}] }
// Find dependencies
const deps = await logicalUnitTracker.findDependencies(repoPath, '7', { transitive: true });
// Returns: ["6"] if Task #7 depends on Task #6
// Check safety before reverting
const safety = await logicalUnitTracker.checkRevertSafety(repoPath, '6');
// Returns: { safe: boolean, blockers: [], warning: string }
// Execute revert for entire task
const result = await logicalUnitTracker.revertTask(repoPath, '6');
// Returns: { success: boolean, conflicts: boolean, message: string }
// Find task by name
const tasks = await logicalUnitTracker.findTaskByName(repoPath, 'Dark Mode');
// Returns: ["6"] if Task #6 has "Dark Mode" in notesExample Usage
示例用法
Revert by Feature Name:
User: "Can we revert the dark mode feature?"
smart-revert workflow:
1. Find tasks by name: logicalUnitTracker.findTaskByName(repo, 'dark mode')
2. Found Task #6 with 2 commits
3. Check safety: logicalUnitTracker.checkRevertSafety(repo, '6')
4. Show plan:
- Revert "Add dark mode toggle" (abc123)
- Revert "Update CSS for dark mode" (def456)
5. User confirms
6. Execute: logicalUnitTracker.revertTask(repo, '6')
7. Result: "Dark mode reverted. 2 commits reverted successfully."Revert by Task ID:
User: "Revert task #6"
smart-revert workflow:
1. Group commits: logicalUnitTracker.groupByTask(repo, 'HEAD')
2. Find Task #6 commits
3. Check dependencies: findDependencies(repo, '6')
4. No dependencies found
5. Execute revert in reverse order
6. Verify successDependency Warning:
User: "Revert the button refactor"
smart-revert workflow:
1. Find Task #7 (Button Refactor)
2. Check safety: checkRevertSafety(repo, '7')
3. Warning: "Task #8 (Modal) depends on Task #7"
4. Offer options:
- Revert both #7 and #8
- Don't revert
- Force revert (handle conflicts manually)
5. User selects option
6. Execute based on choice按功能名称撤销:
User: "Can we revert the dark mode feature?"
smart-revert workflow:
1. Find tasks by name: logicalUnitTracker.findTaskByName(repo, 'dark mode')
2. Found Task #6 with 2 commits
3. Check safety: logicalUnitTracker.checkRevertSafety(repo, '6')
4. Show plan:
- Revert "Add dark mode toggle" (abc123)
- Revert "Update CSS for dark mode" (def456)
5. User confirms
6. Execute: logicalUnitTracker.revertTask(repo, '6')
7. Result: "Dark mode reverted. 2 commits reverted successfully."按任务ID撤销:
User: "Revert task #6"
smart-revert workflow:
1. Group commits: logicalUnitTracker.groupByTask(repo, 'HEAD')
2. Find Task #6 commits
3. Check dependencies: findDependencies(repo, '6')
4. No dependencies found
5. Execute revert in reverse order
6. Verify success依赖警告:
User: "Revert the button refactor"
smart-revert workflow:
1. Find Task #7 (Button Refactor)
2. Check safety: checkRevertSafety(repo, '7')
3. Warning: "Task #8 (Modal) depends on Task #7"
4. Offer options:
- Revert both #7 and #8
- Don't revert
- Force revert (handle conflicts manually)
5. User selects option
6. Execute based on choiceBenefits
优势
For Users:
- Feature-level revert (not commit-level)
- No need to remember commit hashes
- Automatic correct order (reverse chronological)
- Dependency checking prevents breaking other features
For Safety:
- Git notes provide context for every commit
- Reverse order prevents conflicts
- Verification before execution
- Audit trail preserved in git notes
For Automation:
- Integrates with git-notes-audit hook (automatic note creation)
- Works with existing conductor workflow
- No manual note maintenance required
对用户:
- 基于功能的撤销(而非提交级)
- 无需记住提交哈希
- 自动按正确顺序(逆时间序)执行
- 依赖检查可防止破坏其他功能
安全性:
- Git Notes为每个提交提供上下文
- 逆序执行可减少冲突
- 执行前验证
- Git Notes中保留审计轨迹
自动化:
- 与git-notes-audit钩子集成(自动创建笔记)
- 与现有conductor工作流兼容
- 无需手动维护笔记
Integration with git-notes-audit Hook
与git-notes-audit钩子集成
The hook automatically creates git notes for every commit:
git-notes-audit.cjsjson
{
"taskId": "6",
"timestamp": "2026-01-29T10:30:00Z",
"author": "user@example.com",
"metadata": {
"phase": "implementation",
"track": "user-auth_20250115"
}
}This enables:
- Automatic task grouping (no manual note management)
- Dependency detection (via Depends-On field)
- Context-aware revert decisions
git-notes-audit.cjsjson
{
"taskId": "6",
"timestamp": "2026-01-29T10:30:00Z",
"author": "user@example.com",
"metadata": {
"phase": "implementation",
"track": "user-auth_20250115"
}
}这实现了:
- 自动任务分组(无需手动维护笔记)
- 依赖检测(通过Depends-On字段)
- 上下文感知的撤销决策
Performance
性能
- Logical unit detection: <500ms (100 commits)
- Dependency checking: <100ms (transitive depth 3)
- No impact on normal git operations
- 逻辑单元检测:<500ms(100个提交)
- 依赖检查:<100ms(传递深度3)
- 不影响正常Git操作
Related Skills
相关技能
- - Understand track/phase/task structure
track-management - - Git commit conventions
workflow-patterns - - Advanced git operations
git-expert - - When revert is needed due to bugs
debugging
- - 理解工作流/阶段/任务结构
track-management - - Git提交规范
workflow-patterns - - 高级Git操作
git-expert - - 当因BUG需要撤销时
debugging
Memory Protocol (MANDATORY)
记忆协议(强制要求)
Before starting:
Read
.claude/context/memory/learnings.mdAfter completing:
- New pattern discovered ->
.claude/context/memory/learnings.md - Issue encountered ->
.claude/context/memory/issues.md - Decision made ->
.claude/context/memory/decisions.md
ASSUME INTERRUPTION: If it's not in memory, it didn't happen.
开始前:
读取
.claude/context/memory/learnings.md完成后:
- 发现新模式 -> 写入
.claude/context/memory/learnings.md - 遇到问题 -> 写入
.claude/context/memory/issues.md - 做出决策 -> 写入
.claude/context/memory/decisions.md
假设会被中断:若未记录在记忆中,则视为未发生。",