Commit and Push
Commit all local changes following Conventional Commits format and push to remote.
Step 1: Gather Context
Run these commands in parallel to understand the changes:
# See all untracked and modified files
git status
# See staged and unstaged changes
git diff
git diff --cached
# See recent commit messages for style reference
git log --oneline -10Step 2: Analyze Changes
Review the changes and determine:
- Type: What kind of change is this?
- feat - New feature or capability - fix - Bug fix - docs - Documentation only - refactor - Code restructure without behavior change - test - Adding or updating tests - chore - Maintenance, dependency updates - perf - Performance improvement - ci - CI/CD changes
- Scope: Which component is affected?
- Examine the changed files and determine the appropriate scope - Use consistent scope names within the project (check git log for patterns) - *(omit scope for cross-cutting changes)*
- Breaking: Does this break backward compatibility? If yes, add ! after scope.
Step 3: Write Commit Message
Format:
type(scope): description
[optional body explaining why, not what]
[optional footer with issue references]Rules:
- Use imperative mood: "add feature" not "added feature"
- Keep first line under 72 characters
- Focus on *why* in the body, the diff shows *what*
- Reference issues:
Closes #123orFixes #456
Step 4: Stage, Commit, and Push
# Stage all changes (or selectively stage)
git add -A
# Commit with message (use HEREDOC for multi-line)
git commit -m "$(cat <<'EOF'
type(scope): description
Optional body explaining the motivation.
Closes #123
Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"
# Push to remote
git pushExamples
# Simple feature
git commit -m "feat(api): add pagination support to list endpoints"
# Bug fix with body
git commit -m "$(cat <<'EOF'
fix(auth): handle token expiration during long requests
The previous implementation did not account for tokens expiring
during the processing of long-running requests.
Fixes #42
Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"
# Breaking change
git commit -m "$(cat <<'EOF'
feat!(api): change response format for user endpoints
BREAKING CHANGE: The `status` field is now an object with `state` and
`message` properties instead of a plain string.
Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
EOF
)"Step 5: Verify
After pushing, run git status to confirm the working tree is clean and the branch is up to date with remote.