git-workflow
Git Workflow Skill
Git best practices and workflow standards for team collaboration.
When This Activates
- Git operations (commit, branch, merge)
- Pull request creation/review
- Release management
- CI/CD integration
- Keywords: "git", "commit", "branch", "pr", "merge", "github"
Commit Messages
Format
Pattern: <type>: <description>
Types:
feat: New featurefix: Bug fixdocs: Documentation onlyrefactor: Code restructuring (no behavior change)test: Adding/updating testschore: Tooling, dependencies, config
Examples
# ❌ BAD
git commit -m "updates"
git commit -m "fixed stuff"
git commit -m "wip"
# ✅ GOOD
git commit -m "feat: add PDF/EPUB content extraction"
git commit -m "fix: correct nested layer access in transformer models"
git commit -m "docs: update QUICKSTART with new training methods"
git commit -m "refactor: extract validation logic to separate module"
git commit -m "test: add integration tests for data curator"
Multi-line Commits
For complex changes, use commit body:
git commit -m "feat: implement DPO training method
- Add DPOStrategy class with preference pair handling
- Integrate with existing Trainer interface
- Update docs with DPO examples
Closes #15"
Template:
<type>: <short summary>
<body - explain WHY, not WHAT>
<footer - issue references, breaking changes>
Branch Naming
Format
Pattern: <type>/<short-description>
Examples
# ❌ BAD
git checkout -b new-feature
git checkout -b fix
git checkout -b john-branch
# ✅ GOOD
git checkout -b feat/pdf-epub-support
git checkout -b fix/transformer-layer-access
git checkout -b refactor/data-curator-validation
git checkout -b docs/update-training-guide
Types
feat/- New feature developmentfix/- Bug fixesrefactor/- Code restructuringdocs/- Documentation updatestest/- Test additions/updateschore/- Tooling, config, dependencies
Branching Strategies
Feature Branch Workflow (Recommended)
# 1. Create feature branch from main
git checkout main
git pull origin main
git checkout -b feat/new-feature
# 2. Work on feature
# ... make changes ...
git add .
git commit -m "feat: implement new feature"
# 3. Keep up to date with main
git checkout main
git pull origin main
git checkout feat/new-feature
git rebase main # or merge main
# 4. Push and create PR
git push -u origin feat/new-feature
# Create PR via GitHub
Protected Main Branch
Rules:
- No direct commits to
main - All changes via pull requests
- Require review before merge
- Require CI checks to pass
- Delete branch after merge
Pull Request Guidelines
PR Title
Same as commit message format:
feat: add PDF extraction support
fix: resolve memory leak in data loader
docs: update installation instructions
PR Description Template
## Summary
Brief description of changes (1-3 sentences)
## Changes
- Add PDF extraction using PyPDF2
- Update DataCurator class with extract_from_pdf method
- Add tests for PDF extraction
## Testing
- [x] Unit tests added/updated
- [x] Integration tests pass
- [x] Manual testing completed
## Checklist
- [x] Code follows style guide
- [x] Documentation updated
- [x] Tests pass locally
- [x] No new warnings
Closes #42
PR Size Guidelines
Keep PRs Small:
- ✅ Small: < 300 lines changed (ideal)
- ⚠️ Medium: 300-500 lines (acceptable)
- ❌ Large: > 500 lines (split if possible)
Why: Smaller PRs are:
- Easier to review
- Faster to merge
- Less likely to have conflicts
- Easier to revert if needed
When to Split PRs
# ❌ BAD: One massive PR
feat: complete rewrite of training system
- Refactor trainer (500 lines)
- Add new methods (300 lines)
- Update docs (100 lines)
- Add tests (200 lines)
Total: 1100 lines!
# ✅ GOOD: Multiple focused PRs
PR #1: refactor: extract strategy pattern for training methods (200 lines)
PR #2: feat: add DPO training strategy (150 lines)
PR #3: feat: add full fine-tuning strategy (150 lines)
PR #4: docs: update training guide with new methods (100 lines)
PR #5: test: add integration tests for training strategies (200 lines)
Code Review Process
Creating a PR
- Ensure tests pass locally:
pytest tests/
black . && isort .
mypy src/
-
Write clear PR description (use template above)
-
Request reviewers: Tag appropriate team members
-
Link issues: Use "Closes #N" or "Fixes #N"
Responding to Review Feedback
Process:
- Read all comments before responding
- Ask clarifying questions if needed
- Make requested changes
- Reply to comments when done
- Request re-review
Response Types:
# ✅ Agree and implemented
Done! Changed to use a set for O(1) lookup.
# ❓ Clarifying question
Good point - should this handle empty lists as well, or can we assume non-empty?
# 💭 Alternative approach
I see your concern. What if we use a generator instead? That avoids loading everything into memory.
# ✅ Agree but out of scope
You're right, but I'd prefer to address that in a separate PR since it's unrelated. Created #54 to track it.
Merging
Options:
- Squash and merge: Combines all commits into one (recommended for feature branches)
- Rebase and merge: Replays commits on top of main (for clean history)
- Merge commit: Preserves all commits (for long-running branches)
Recommended: Squash and merge for most PRs
After Merge:
# Delete remote branch
git push origin --delete feat/my-feature
# Delete local branch
git checkout main
git branch -d feat/my-feature
# Pull latest main
git pull origin main
Git Best Practices
Commit Often, Perfect Later
# While working
git commit -m "wip: add validation logic"
git commit -m "wip: handle edge cases"
git commit -m "wip: add tests"
# Before pushing, squash/rebase to clean history
git rebase -i HEAD~3
# Squash commits into one clean commit
Write Atomic Commits
One commit = One logical change:
# ❌ BAD: Multiple unrelated changes
git commit -m "fix: add validation, update docs, refactor tests"
# ✅ GOOD: Separate commits
git commit -m "fix: add input validation for user data"
git commit -m "docs: update validation examples in README"
git commit -m "refactor: extract validation tests to separate file"
Use .gitignore Properly
Common patterns:
# Python
__pycache__/
*.py[cod]
*.so
.Python
env/
venv/
*.egg-info/
# IDE
.vscode/
.idea/
*.swp
# OS
.DS_Store
Thumbs.db
# Project-specific
.env
*.log
data/
*.db
Never Commit Secrets
# ❌ BAD
DATABASE_URL=postgres://user:password@host/db
# ✅ GOOD: Use .env file (gitignored)
# .env
DATABASE_URL=postgres://user:password@host/db
# Load in code
from dotenv import load_dotenv
load_dotenv()
If you accidentally commit secrets:
- Rotate the secret immediately
- Use
git filter-branchor BFG Repo-Cleaner to remove from history - Force push (WARNING: Only on personal branches!)
CI/CD Integration
GitHub Actions Workflow
Minimum CI checks:
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install dependencies
run: |
pip install -e ".[dev]"
- name: Run formatters (check)
run: |
black --check .
isort --check .
- name: Run linter
run: ruff check .
- name: Run type checker
run: mypy src/
- name: Run tests
run: pytest tests/ --cov=src/ --cov-report=term-missing
- name: Check coverage
run: |
coverage report --fail-under=80
Pre-commit Hooks
Install locally for automatic checks:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/psf/black
rev: 23.11.0
hooks:
- id: black
- repo: https://github.com/pycqa/isort
rev: 5.12.0
hooks:
- id: isort
- repo: local
hooks:
- id: tests
name: run tests
entry: pytest tests/
language: system
pass_filenames: false
always_run: true
Release Management
Semantic Versioning
Format: MAJOR.MINOR.PATCH
- MAJOR: Breaking changes
- MINOR: New features (backwards compatible)
- PATCH: Bug fixes (backwards compatible)
Examples:
1.0.0→1.0.1: Bug fix1.0.1→1.1.0: New feature added1.1.0→2.0.0: Breaking change
Creating a Release
# 1. Update version in code
# (setup.py, __version__, etc.)
# 2. Update CHANGELOG.md
## [1.2.0] - 2025-10-25
### Added
- PDF extraction support
- New training strategies
### Fixed
- Memory leak in data loader
### Changed
- Improved error messages
# 3. Commit version bump
git commit -m "chore: bump version to 1.2.0"
# 4. Tag release
git tag -a v1.2.0 -m "Release v1.2.0"
# 5. Push with tags
git push origin main --tags
# 6. Create GitHub Release
# (via GitHub UI or gh CLI)
gh release create v1.2.0 --title "v1.2.0" --notes "See CHANGELOG.md"
Troubleshooting
Undoing Changes
# Undo last commit (keep changes)
git reset --soft HEAD~1
# Undo last commit (discard changes)
git reset --hard HEAD~1
# Undo changes to specific file
git checkout -- file.py
# Revert a merged PR
git revert -m 1 <merge-commit-hash>
Fixing Commit Messages
# Fix last commit message
git commit --amend -m "fix: correct commit message"
# Fix older commits
git rebase -i HEAD~3
# Change "pick" to "reword" for commits to fix
Resolving Merge Conflicts
# 1. Update main
git checkout main
git pull origin main
# 2. Merge main into feature branch
git checkout feat/my-feature
git merge main
# 3. Resolve conflicts
# (edit files, remove conflict markers)
# 4. Mark as resolved
git add .
git commit -m "chore: resolve merge conflicts with main"
# 5. Push
git push origin feat/my-feature
Integration with [PROJECT_NAME]
[PROJECT_NAME] uses the following git workflow:
- Branch naming:
<type>/<description>(e.g.,feat/pdf-support) - Commit messages: Conventional commits (
feat:,fix:, etc.) - PR reviews: Required for all changes to main
- CI checks: Tests, formatters, linters must pass
- Release: Semantic versioning with GitHub Releases
Version: 1.0.0 Type: Knowledge skill (no scripts) See Also: engineering-standards, documentation-guide, code-review
More from akaszubski/anyclaude-local
testing-guide
Complete testing methodology - TDD, progression tracking, regression prevention, and test patterns
1observability
Logging, debugging, profiling, and performance monitoring for development. Use when adding logging, debugging issues, profiling performance, or instrumenting code for observability.
1python-standards
Python code quality standards (PEP 8, type hints, docstrings). Use when writing Python code.
1github-workflow
GitHub-first workflow - Issues, PRs, milestones, auto-tracking for solo developer productivity
1code-review
This skill should be used when reviewing code or preparing code for review. It provides guidelines for what to look for in reviews, how to write constructive feedback, and standards for review comments.
1database-design
Database schema design, migrations, query optimization, and ORM patterns. Use when designing database schemas, writing migrations, optimizing queries, or working with ORMs like SQLAlchemy or Django ORM.
1