Awesome-omni-skill git-best-practices
Git best practices for ensuring proper .gitignore setup and git workflow management. Use this skill when initializing new projects, working with package managers (npm, pip, etc.), or making git commits.
git clone https://github.com/diegosouzapw/awesome-omni-skill
T=$(mktemp -d) && git clone --depth=1 https://github.com/diegosouzapw/awesome-omni-skill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/tools/git-best-practices" ~/.claude/skills/diegosouzapw-awesome-omni-skill-git-best-practices && rm -rf "$T"
skills/tools/git-best-practices/SKILL.mdGit Best Practices Skill
This skill provides comprehensive guidelines for proper git workflow management, with a focus on
.gitignore setup and preventing accidental commits of unwanted files.
.gitignore Management
Critical: Always Check Before Initializing Package Managers
BEFORE initializing npm, pip, poetry, cargo, or any other package manager:
- Check if
exists: Use.gitignore
or check via file systemls -la .gitignore - If
doesn't exist: Create it with appropriate patterns for your project type.gitignore - If
exists: Verify it includes the necessary patterns for your package manager.gitignore - After creating/updating
: Verify it's working with.gitignore
to ensure ignored files don't appeargit status
Required Patterns by Project Type
Node.js / npm / yarn / pnpm
node_modules/ npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* .pnpm-store/
Python / pip / poetry
__pycache__/ *.py[cod] *$py.class *.so .Python env/ venv/ ENV/ env.bak/ venv.bak/ .venv pip-log.txt pip-delete-this-directory.txt .pytest_cache/ .coverage htmlcov/ *.egg-info/ dist/ build/
Rust / cargo
target/ Cargo.lock
Go
*.exe *.exe~ *.dll *.so *.dylib *.test *.out go.work
Java / Maven / Gradle
*.class *.log *.jar *.war *.ear target/ build/ .gradle/ .idea/ *.iml
Universal Patterns (All Projects)
These should be included in every
.gitignore:
# Environment files .env .env.local .env.*.local .env.development .env.production .env.test *.env # Build outputs dist/ build/ .next/ out/ *.tsbuildinfo # OS files .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db Desktop.ini # Logs *.log logs/ npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* lerna-debug.log* # Editor files (optional - include if not using shared IDE config) .idea/ .vscode/ *.swp *.swo *~ .project .classpath .settings/ # Temporary files *.tmp *.temp .cache/
Git Workflow Best Practices
Before Committing
-
Always check
before committing to see what will be committed:git statusgit status -
Review the output carefully:
- Ensure no sensitive files are staged (
, secrets, API keys).env - Verify
or other build artifacts aren't includednode_modules/ - Check that only intended files are staged
- Ensure no sensitive files are staged (
-
If unwanted files appear:
- Check if
exists and has the correct patterns.gitignore - Update
if needed.gitignore - Remove files from staging:
git reset HEAD <file> - Verify with
againgit status
- Check if
Commit Message Format
Use the existing project format:
feat: TASK-{id} - {description}
Examples:
feat: TASK-123 - Add user authenticationfeat: TASK-456 - Fix memory leak in data processor
Never Commit
- Sensitive files:
,.env
, any file containing secrets, API keys, passwords.env.local - Build artifacts:
,node_modules/
,dist/
, compiled binariesbuild/ - OS files:
,.DS_StoreThumbs.db - Large binary files: Unless using Git LFS (Large File Storage)
- IDE-specific files: Unless the project explicitly includes them in version control
Verifying .gitignore Effectiveness
After creating or updating
.gitignore:
- Run
to see what files git is trackinggit status - If ignored files still appear, they may have been previously tracked:
# Remove from git cache (but keep local files) git rm --cached <file> # Or for directories: git rm -r --cached <directory> - Commit the removal:
git commit -m "chore: Remove tracked files that should be ignored" - Verify again with
git status
Project-Specific Considerations
When Initializing a New Project
- Create
before running.gitignore
,npm init
, etc.pip install - Include patterns for your package manager
- Initialize git:
(if not already initialized)git init - Verify
is working before proceeding.gitignore
When Adding New Dependencies
- Check
after installing packagesgit status - Ensure new build artifacts are ignored
- If new file types appear, update
accordingly.gitignore
When Working with Multiple Languages
If a project uses multiple languages/frameworks, include patterns for all of them:
- Node.js + Python: Include both
andnode_modules/__pycache__/ - React + Python backend: Include
or.next/
plus Python patternsdist/
Quick Reference Checklist
Before committing:
-
exists and is appropriate for the project type.gitignore - Ran
and reviewed outputgit status - No sensitive files (
, secrets) are staged.env - No build artifacts (
,node_modules/
, etc.) are stageddist/ - Commit message follows format:
feat: TASK-{id} - {description} -
is working correctly (ignored files don't appear in.gitignore
)git status
Common Mistakes to Avoid
-
Initializing package managers before creating
.gitignore- This can lead to
or similar directories being trackednode_modules/
- This can lead to
-
Assuming
works retroactively.gitignore- Files already tracked by git will continue to be tracked even if added to
.gitignore - Use
to untrack themgit rm --cached
- Files already tracked by git will continue to be tracked even if added to
-
Committing without checking
git status- Always verify what you're committing
-
Including sensitive data in commits
- Double-check for
files, API keys, passwords.env - If accidentally committed, use
orgit reset
(if not pushed)git commit --amend
- Double-check for
-
Forgetting project-specific patterns
- Different projects need different
patterns.gitignore - Tailor the
to the project's technology stack.gitignore
- Different projects need different
Pre-Commit Checklist
Before committing, verify:
- TypeScript compilation passes (
)npx tsc --noEmit - No console errors in browser testing
- All success criteria verified
- Progress.txt updated
Pre-Commit Hooks
Consider adding pre-commit hooks for:
- TypeScript compilation check
- Linter checks
- Test execution
Document hook setup in project README if implemented.
Pre-Commit Validation
Run TypeScript compilation check before commit:
# Before committing, verify compilation npx tsc --noEmit # If errors exist, fix them before committing
Verify no console errors:
# Check for console errors in browser agent-browser console | grep -i "error" # Or check build output npm run build 2>&1 | grep -i "error"
Check git status before staging:
# Always check what will be committed git status # Review changes git diff # Stage only relevant files git add src/scenes/GameScene.ts
Review changes with git diff:
# Review all changes git diff # Review staged changes git diff --staged # Review specific file git diff src/scenes/GameScene.ts
Commit Message Patterns
Format: "feat: TASK-ID - Description"
# Examples git commit -m "feat: US-033 - Add wizard character sprite" git commit -m "feat: US-034 - Implement timer countdown" git commit -m "feat: US-035 - Add scene transition animations"
Include task ID for traceability:
# Always include task ID git commit -m "feat: TASK-{id} - {description}" # Examples git commit -m "feat: US-036 - Fix maze generation error handling"
Use conventional commit types:
# Types: feat, fix, chore, docs, refactor, test git commit -m "feat: US-037 - Add new feature" git commit -m "fix: US-038 - Fix bug" git commit -m "chore: US-039 - Update dependencies"
Keep messages descriptive but concise:
# ✅ GOOD: Descriptive but concise git commit -m "feat: US-040 - Add coin collection sound effect" # ❌ BAD: Too vague git commit -m "feat: US-040 - Update code" # ❌ BAD: Too verbose git commit -m "feat: US-040 - Add coin collection sound effect that plays when player collects coin and updates score and triggers animation"
Workflow Patterns
Check git status before operations:
# Before any git operation, check status git status # See what files changed git status --short # See untracked files git status --untracked-files=all
Stage only relevant files:
# Stage specific files git add src/scenes/GameScene.ts git add src/scenes/GameOverScene.ts # Don't stage everything # ❌ git add . # Only if you're sure
Commit after verification passes:
# 1. Make changes # 2. Verify TypeScript compilation npx tsc --noEmit # 3. Verify browser testing agent-browser open http://localhost:3000 # 4. Stage files git add src/ # 5. Commit git commit -m "feat: TASK-ID - Description"
Update progress.txt before commit:
# Update progress.txt with task completion echo "## Task Complete" >> tasks/progress.txt echo "- [x] All criteria met" >> tasks/progress.txt # Then commit git add tasks/progress.txt git commit -m "feat: TASK-ID - Description"