Git Commit Message Formatting
When to Use This Skill
Use this skill when creating git commits with the Bash tool, especially for commits with:
-
Multi-line messages
-
Body text or explanations
-
Co-authored-by footers
-
Claude Code attribution
Core Principle
Avoid HEREDOC syntax - Use -m with multiline strings instead.
Pattern to Follow
✅ DO - Use multiline string with -m
git commit -m "feat(github): add github plugin
This adds comprehensive GitHub workflow support including commands for PR management and review workflows.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>"
Key points:
-
Single -m flag with entire message in quotes
-
Newlines preserved within the quoted string
-
No special syntax or escaping needed
-
Works reliably across all environments
❌ DON'T - Use HEREDOC syntax
This FAILS in Claude Code's Bash tool
git commit -m "$(cat <<'EOF' feat(github): add github plugin
This adds comprehensive GitHub workflow support.
🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com> EOF )"
Why this fails:
-
HEREDOC syntax has shell interpretation issues
-
Fails in certain execution contexts
-
More complex than necessary
-
Unreliable across environments
Examples
Simple commit
git commit -m "fix: resolve path configuration issue"
Commit with body
git commit -m "feat: add progressive disclosure pattern
Skills now support references/ subdirectory for detailed documentation that loads on-demand."
Full conventional commit
git commit -m "feat(tools): add git commit message skill
This skill teaches Claude to format git commit messages using multiline strings instead of HEREDOC syntax, which fails in certain shell environments.
The pattern uses a single -m flag with the entire message in quotes, preserving newlines naturally."
Why It Matters
Using -m with multiline strings is:
-
Reliable: Works consistently in all environments
-
Simple: No complex shell syntax needed
-
Portable: Standard git behavior
-
Direct: Git handles newlines correctly
HEREDOC syntax causes issues because:
-
Shell interpretation varies by environment
-
Execution context in Claude Code differs from terminal
-
Quote handling becomes complex
-
Unnecessary complexity for the task
Quick Reference
-
One -m flag
-
Entire message in double quotes
-
Newlines work naturally
-
No HEREDOC needed