Revert
Purpose: Safely rollback changes using git revert Phases: Identify -> Assess -> Revert -> Validate -> Commit Usage:
/revert [target] [scope flags]
Constraints
- •Never force push after revert without explicit approval
- •Never revert without user confirmation
- •Never leave unresolved conflicts
- •Never use
git reset --hard-- usegit revertinstead - •Never revert shared history without team coordination
- •Show what will be reverted before applying
- •User confirmation of target required
- •User approval of plan required
- •Validation after revert required
- •User confirmation before commit required
- •Document reason for revert when provided
- •Create follow-up todo if revert is temporary
- •Notify team of significant reverts
- •Consider PR for reverts on shared branches
Note: Command examples use
npmas default. Adapt to the project's package manager perai-assistant-protocol— Project Commands.
Target Options
| Target | Description |
|---|---|
HEAD | Revert last commit (default) |
HEAD~N | Revert last N commits |
<sha> | Revert specific commit |
<sha>..<sha> | Revert range of commits |
--pr=<number> | Revert all commits from a PR |
Scope Flags
| Flag | Description |
|---|---|
--dry-run | Preview revert without applying |
--no-commit | Stage reverts without committing |
--reason=<text> | Document reason for revert |
Examples:
/revert # Revert last commit /revert HEAD~3 # Revert last 3 commits /revert abc123 # Revert specific commit /revert --pr=456 # Revert PR #456 /revert abc123 --reason="broke prod" # Revert with reason /revert HEAD --dry-run # Preview revert
Workflow
Phase 1: Identify
Goal: Parse target and show what will be reverted
Step 1.1: Parse Target
# Get current state git branch --show-current git log --oneline -10
Parse target from input:
## Revert Target | Parameter | Value | |-----------|-------| | Target | `[HEAD / sha / range]` | | Commits | N commit(s) | | Reason | [if provided] | | Mode | [normal / dry-run / no-commit] |
Step 1.2: Show Commits to Revert
# For single commit git show --stat [sha] # For range git log --oneline [range] # For PR gh pr view [number] --json commits
Display commits: See references/revert-display-templates.md for full display format.
Step 1.3: Show What Will Change
# Show combined diff of commits being reverted git diff [sha]^..[sha]
Display changes: See references/revert-display-templates.md for full display format.
Step 1.4: Confirm Target
Display confirmation prompt: See references/revert-display-templates.md for full display format.
GATE: User must confirm target.
Phase 2: Assess
Goal: Evaluate impact and conflict risk
Step 2.1: Check for Dependent Changes
# Check if any commits after target depend on it git log --oneline [sha]..HEAD # Check for merge commits that include target git log --oneline --merges [sha]..HEAD
If dependent commits found: See references/revert-display-templates.md for warning display format.
Wait for decision.
Step 2.2: Assess Conflict Risk
# Check if files were modified since target git diff --name-only [sha] HEAD
If conflicts likely: See references/revert-display-templates.md for conflict risk display format.
Step 2.3: Present Revert Plan
## Revert Plan **Target:** `[sha]` - "[message]" **Approach:** - Revert method: `git revert [sha]` - Conflict risk: [Low / Medium / High] - Dependent commits: [None / List] **Expected outcome:** - Changes from `[sha]` will be undone - New commit will be created: "Revert [message]" - History preserved (original commit visible) **Approve revert?** (yes / modify / abort)
GATE: User must approve plan.
Phase 3: Revert
Goal: Apply the revert and handle any conflicts
Step 3.1: Apply Revert
If dry-run mode:
git revert --no-commit [sha] git diff --staged git reset HEAD # Undo the staged revert
## Dry Run Results **Would revert:** - Commit: `[sha]` - Files changed: N **Changes preview:** [diff output] **No changes made.** Run without `--dry-run` to apply.
Otherwise:
# For single commit git revert [sha] --no-commit # For multiple commits (reverse order) git revert [sha1] [sha2] [sha3] --no-commit # For range git revert [older]..[newer] --no-commit
Step 3.2: Handle Conflicts
If conflicts occur: See references/revert-display-templates.md for conflict resolution display format.
Wait for decision.
If resolving:
# Show conflict markers git diff --name-only --diff-filter=U
For each conflicted file: See references/revert-display-templates.md for per-file conflict display format.
After resolution:
git add [resolved-files]
Step 3.3: Review Staged Revert
## Staged Revert **Files to be reverted:** | File | Status | |------|--------| | `src/feature.ts` | Reverted | | `tests/feature.spec.ts` | Reverted | **Conflicts resolved:** [Yes/No/N/A] Ready to validate?
Phase 4: Validate
Goal: Confirm the codebase is healthy after revert
Step 4.1: Run Validation
# Type check npm run typecheck # Lint npm run lint # Tests (scoped to affected areas) npm run test -- [affected-patterns]
Step 4.2: Validation Report
## Validation After Revert | Check | Status | Details | |-------|--------|---------| | Type check | Pass / Fail | [details] | | Lint | Pass / Fail | [details] | | Tests | Pass / Fail | X passed, Y failed | **Validation passed?** [Yes/No]
If failures:
> **WARNING:** > Validation failed after revert. > > **Issues:** > - [list issues] > > **This likely means:** > - Later code depends on the reverted changes > - Additional fixes needed after revert > > **Options:** > 1. Fix issues and continue with revert > 2. Abort revert (reset staged changes) > 3. Create todo for fixes and proceed > > **How to proceed?**
Wait for decision.
Phase 5: Commit
Goal: Finalize the revert commit
Step 5.1: Prepare Commit Message
## Revert Commit **Default message:**
Revert "[original commit message]"
This reverts commit [sha].
[Reason if provided]
**Customize message?** (yes / use default)
Step 5.2: Confirm Commit
## Ready to Commit Revert **Reverting:** `[sha]` - "[message]" **Files changed:** N **Reason:** [reason if provided] **Commit message:**
Revert "feat: add feature"
This reverts commit abc123.
Reason: Feature caused production issues.
**Create revert commit?** (yes / edit message / abort)
GATE: Never commit without explicit "yes".
git commit -m "Revert \"[original message]\" This reverts commit [sha]. [Reason]"
Step 5.3: Completion
## Revert Complete | Item | Value | |------|-------| | Reverted commit | `[sha]` | | Revert commit | `[new-sha]` | | Files changed | N | **Next steps:** - Push to remote: `git push origin [branch]` - Create PR if needed - Deploy if urgent **Note:** Original commit `[sha]` remains in history. To undo this revert: `git revert [new-sha]`
Additional References
- •Special Cases & Recovery Options -- Merge commit reverts, PR reverts, partial reverts, and recovery procedures
- •Display Templates -- Full markdown display templates for user-facing output in each phase