Files
leo-claude-mktplace/plugins/git-flow/commands/commit.md
lmiranda 35cf20e02d fix: protected branch detection and non-blocking hooks
- Add protected branch detection to /commit command (Step 1)
- Warn users before committing to protected branches
- Offer to create feature branch automatically
- Rewrite doc-guardian hook to be truly non-blocking
- Enforce strict [plugin-name] prefix in all hook outputs
- Add forbidden words list to prevent accidental blocking

Fixes #109, #110

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 11:08:00 -05:00

3.5 KiB

/commit - Smart Commit

Purpose

Create a git commit with an auto-generated conventional commit message based on staged changes.

Behavior

Step 1: Check for Protected Branch

Before any commit operation, check if the current branch is protected:

  1. Get current branch: git branch --show-current
  2. Check against GIT_PROTECTED_BRANCHES (default: main,master,development,staging,production)

If on a protected branch, warn the user:

⚠️  You are on a protected branch: development

Protected branches typically have push restrictions that will prevent
direct commits from being pushed to the remote.

Options:
1. Create a feature branch and continue (Recommended)
2. Continue on this branch anyway (may fail on push)
3. Cancel

If option 1 (create feature branch):

  • Prompt for branch type (feat/fix/chore/docs/refactor)
  • Prompt for brief description
  • Create branch using /branch-start naming conventions
  • Continue with commit on the new branch

If option 2 (continue anyway):

  • Proceed with commit (user accepts risk of push rejection)
  • Display reminder: "Remember: push may be rejected by remote protection rules"

Step 2: Analyze Changes

  1. Run git status to see staged and unstaged changes
  2. Run git diff --staged to examine staged changes
  3. If nothing staged, prompt user to stage changes

Step 3: Generate Commit Message

Analyze the changes and generate a conventional commit message:

<type>(<scope>): <description>

[optional body]

[optional footer]

Types:

  • feat: New feature
  • fix: Bug fix
  • docs: Documentation only
  • style: Formatting, missing semicolons, etc.
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Performance improvement
  • test: Adding/updating tests
  • chore: Maintenance tasks
  • build: Build system or external dependencies
  • ci: CI configuration

Scope: Determined from changed files (e.g., auth, api, ui)

Step 4: Confirm or Edit

Present the generated message:

Proposed commit message:
───────────────────────
feat(auth): add password reset functionality

Implement forgot password flow with email verification.
Includes rate limiting and token expiration.
───────────────────────

Options:
1. Use this message (Recommended)
2. Edit the message
3. Regenerate with different focus
4. Cancel

Step 5: Execute Commit

If confirmed, run:

git commit -m "$(cat <<'EOF'
<message>

Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"

Environment Variables

Variable Default Description
GIT_PROTECTED_BRANCHES main,master,development,staging,production Branches that trigger protection warning
GIT_COMMIT_STYLE conventional Message style (conventional, simple, detailed)
GIT_SIGN_COMMITS false Use GPG signing
GIT_CO_AUTHOR true Include Claude co-author footer

Edge Cases

No Changes Staged

No changes staged for commit.

Would you like to:
1. Stage all changes (`git add -A`)
2. Stage specific files (I'll help you choose)
3. Cancel

Untracked Files

Found 3 untracked files:
- src/new-feature.ts
- tests/new-feature.test.ts
- docs/new-feature.md

Include these in the commit?
1. Yes, stage all (Recommended)
2. Let me pick which ones
3. No, commit only tracked files

Output

On success:

Committed: abc1234
feat(auth): add password reset functionality

Files: 3 changed, 45 insertions(+), 12 deletions(-)