Git-aware smart revert for tracks, phases, and tasks. Handles rewritten history, finds related commits, and provides safe rollback with multiple confirmation gates.
Git-aware intelligent revert system for reverting logical work units (tracks, phases, tasks) while handling complex Git histories.
| 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.
[~])[x])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?
Goal: Find ALL commits related to the logical unit.
Find implementation commits:
[x] Task: Description \abc1234``)Find plan-update commits:
Find track creation commit (if reverting entire track):
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)
Present clear summary before any action:
## Revert Execution Plan
**Target**: Task 2.1 "Implement user validation"
**Commits to Revert**: 2
1. `abc1234` - "feat(user): implement validation"
2. `def5678` - "conductor(plan): mark task 2.1 complete"
**Action**: Run `git revert --no-edit` on each commit (newest first)
Do you want to proceed?
A) Yes - execute the revert
B) No - cancel and review
Execute reverts (newest to oldest):
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
# Extract SHA from plan.md
grep -oP '\[x\].*`\K[a-f0-9]{7}' plan.md
# Verify SHA exists
git cat-file -t <sha>
# Find commits that modified plan.md after implementation
git log --oneline -- path/to/plan.md | head -5
# Search by commit message similarity
git log --oneline --all | grep -i "implement validation"
# Search by file changes
git log --oneline --all -- src/models/user.py
# Find when track was added to registry
git log -p -- conductor/tracks.md | grep -B5 "Track: user-auth"
| 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 |
If git revert fails:
Always verify the plan file reflects the revert:
Before: [x] Task 2.1: Implement validation `abc1234`
After: [ ] Task 2.1: Implement validation
If plan state is inconsistent, offer to fix it.
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 success
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 success
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]
Read plan.md and tracks.md to understand work structure.
Follow established commit conventions when creating revert commits.
Update context files if revert affects product features.
Instead of asking "Which commits?", ask "Which feature/bug?"
Old Workflow:
git revert abc123New Workflow (Git Notes-Based):
logical-unit-tracker.cjsgit revert -n C B A (reverse order)logical-unit-tracker.cjs to group commits by taskconst 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 notes
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 success
Dependency 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
For Users:
For Safety:
For Automation:
The git-notes-audit.cjs hook automatically creates git notes for every commit:
{
"taskId": "6",
"timestamp": "2026-01-29T10:30:00Z",
"author": "user@example.com",
"metadata": {
"phase": "implementation",
"track": "user-auth_20250115"
}
}
This enables:
track-management - Understand track/phase/task structureworkflow-patterns - Git commit conventionsgit-expert - Advanced git operationsdebugging - When revert is needed due to bugs| Anti-Pattern | Why It Fails | Correct Approach | | ---------------------------------- | ------------------------------------------------- | ------------------------------------------------------------------------- | | Reverting without impact analysis | Unintended commits or files are also reverted | Always analyze related commits, open files, and uncommitted changes first | | Force-pushing after revert | Destroys upstream history for other collaborators | Use non-destructive revert commits instead of force-push | | Skipping confirmation gate | Accidental revert of critical work | Always present a summary and require confirmation before executing | | Reverting across multiple features | Entangles unrelated changes in a single revert | Split revert into targeted per-feature commits | | Not running tests after revert | Revert introduces new breakage | Verify automated tests pass before marking revert complete |
Before starting:
Read .claude/context/memory/learnings.md
After completing:
.claude/context/memory/learnings.md.claude/context/memory/issues.md.claude/context/memory/decisions.mdASSUME INTERRUPTION: If it's not in memory, it didn't happen.