--- description: "Commit and push changes with a descriptive message" argument-hint: "[optional-context]" mode: code --- 1. Analyze the current changes to understand what needs to be committed: ```bash # Check for staged and unstaged changes git status --short # View the diff of all changes (staged and unstaged) git diff HEAD ``` 2. Based on the diff output, formulate a commit message following conventional commit format: - **feat**: New feature or functionality - **fix**: Bug fix - **refactor**: Code restructuring without behavior change - **docs**: Documentation changes - **test**: Adding or updating tests - **chore**: Maintenance tasks, dependencies, configs - **style**: Formatting, whitespace, no logic changes Format: `type(scope): brief description` Examples: - `feat(api): add user authentication endpoint` - `fix(ui): resolve button alignment on mobile` - `refactor(core): simplify error handling logic` - `docs(readme): update installation instructions` 3. Stage all unstaged changes: ```bash git add -A ``` 4. Commit with the generated message: ```bash git commit -m "type(scope): brief description" ``` **If pre-commit hooks fail:** - Review the error output (linter errors, type checking errors, etc.) - Fix the identified issues in the affected files - Re-stage the fixes: `git add -A` - Retry the commit: `git commit -m "type(scope): brief description"` 5. Push to the remote repository: ```bash git push ``` **If pre-push hooks fail:** - Review the error output (test failures, linter errors, etc.) - Fix the identified issues in the affected files - Stage and commit the fixes using steps 3-4 - Retry the push: `git push` **Tips for good commit messages:** - Keep the first line under 72 characters - Use imperative mood ("add", "fix", "update", not "added", "fixes", "updated") - Be specific but concise - If multiple unrelated changes exist, consider splitting into separate commits **Common hook failures and fixes:** - **Linter errors**: Run the project's linter (e.g., `npm run lint` or `pnpm lint`) to see all issues, then fix them - **Type checking errors**: Run type checker (e.g., `npx tsc --noEmit`) to identify type issues - **Test failures**: Run tests (e.g., `npm test` or `pnpm test`) to identify failing tests and fix them - **Format issues**: Run formatter (e.g., `npm run format` or `pnpm format`) to auto-fix formatting