git-workflow
1
总安装量
1
周安装量
#50825
全站排名
安装命令
npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill git-workflow
Agent 安装分布
opencode
1
codex
1
claude-code
1
Skill 文档
Git Workflow
Implement effective branching strategies and pull request workflows for team collaboration.
When to Use This Skill
Use this skill when:
- Establishing team Git workflows
- Implementing branching strategies
- Configuring pull request processes
- Setting up release management
- Improving code review practices
Prerequisites
- Git installed
- Repository hosting (GitHub, GitLab, Bitbucket)
- Basic Git knowledge
Branching Strategies
Trunk-Based Development
Best for: Continuous deployment, small teams, mature CI/CD
main ââââââââââââââââââââââââââââââââââââââââââ
â â â â â â
âââ âââ âââ âââ âââ âââ
feature branches (short-lived)
# Create short-lived feature branch
git checkout main
git pull origin main
git checkout -b feature/add-login
# Work and commit frequently
git add .
git commit -m "feat: add login form"
# Keep branch updated
git fetch origin
git rebase origin/main
# Merge quickly (same day ideally)
git checkout main
git pull origin main
git merge feature/add-login
git push origin main
git branch -d feature/add-login
GitHub Flow
Best for: Continuous delivery, web applications
main ââââââââââââââââââââââââââââââââââââââââââââ
â â â â
âââââââââââââ â â
feature/login â â
â â
âââââââââââââââââââââââââ â
feature/dashboard â
â
âââââââââââââââââââââââââââââââ
hotfix/security-patch
# Create feature branch from main
git checkout main
git pull origin main
git checkout -b feature/user-dashboard
# Push and create PR
git push -u origin feature/user-dashboard
# After review, merge via PR (squash recommended)
# Delete branch after merge
GitFlow
Best for: Scheduled releases, versioned products
main âââââââââââââââââââââââââââââââââââââââââ
â â â
release âââââââââ¼ââââââââââââââââ¼âââââââââââââââ¼
â â â â â
develop ââââââââââââââ¼ââââââââââââââââââââââââââ¼
â â â â â â
feature ââââ´ââââââââââ â â â â
â â â â
hotfix âââââââââââââââââââââ´ââââââââ¼ââââ¼âââââââ
â â
feature âââââââââââââââââââââââââââââ´ââââ
# Initialize GitFlow
git flow init
# Start feature
git flow feature start user-auth
# Finish feature (merges to develop)
git flow feature finish user-auth
# Start release
git flow release start 1.0.0
# Finish release (merges to main and develop)
git flow release finish 1.0.0
# Hotfix
git flow hotfix start security-fix
git flow hotfix finish security-fix
Commit Conventions
Conventional Commits
<type>(<scope>): <description>
[optional body]
[optional footer(s)]
Types:
feat: New featurefix: Bug fixdocs: Documentationstyle: Formattingrefactor: Code restructuringtest: Adding testschore: Maintenance
Examples:
git commit -m "feat(auth): add OAuth2 login support"
git commit -m "fix(api): handle null response from payment service"
git commit -m "docs: update API documentation for v2 endpoints"
git commit -m "refactor(db): optimize user query performance"
# Breaking change
git commit -m "feat(api)!: change response format for user endpoint
BREAKING CHANGE: The user endpoint now returns an object instead of array"
Commit Message Template
# Create template file ~/.gitmessage
# Subject line (50 chars max)
# Body (72 chars per line max)
# - What changed
# - Why it changed
# - Any side effects
# Footer
# Fixes #123
# Co-authored-by: Name <email>
# Configure Git to use template
git config --global commit.template ~/.gitmessage
Pull Request Workflow
PR Template
<!-- .github/pull_request_template.md -->
## Description
Brief description of changes
## Type of Change
- [ ] Bug fix (non-breaking change)
- [ ] New feature (non-breaking change)
- [ ] Breaking change
- [ ] Documentation update
## Testing
- [ ] Unit tests added/updated
- [ ] Integration tests added/updated
- [ ] Manual testing performed
## Checklist
- [ ] Code follows project style guidelines
- [ ] Self-review performed
- [ ] Documentation updated
- [ ] No new warnings introduced
## Related Issues
Closes #
## Screenshots (if applicable)
Branch Protection Rules
# GitHub branch protection
branch_protection:
branch: main
required_pull_request_reviews:
required_approving_review_count: 1
dismiss_stale_reviews: true
require_code_owner_reviews: true
required_status_checks:
strict: true
contexts:
- "ci/tests"
- "ci/lint"
restrictions:
users: []
teams: ["maintainers"]
enforce_admins: true
required_linear_history: true
allow_force_pushes: false
allow_deletions: false
Code Owners
# .github/CODEOWNERS
# Default owners
* @team-leads
# Frontend code
/src/frontend/ @frontend-team
*.tsx @frontend-team
*.css @frontend-team
# Backend code
/src/api/ @backend-team
/src/services/ @backend-team
# Infrastructure
/terraform/ @platform-team
/k8s/ @platform-team
Dockerfile @platform-team
# Documentation
/docs/ @tech-writers
*.md @tech-writers
Git Hooks
Pre-commit Hook
#!/bin/sh
# .git/hooks/pre-commit
# Run linting
npm run lint
if [ $? -ne 0 ]; then
echo "Linting failed. Fix errors before committing."
exit 1
fi
# Run tests
npm run test:unit
if [ $? -ne 0 ]; then
echo "Tests failed. Fix tests before committing."
exit 1
fi
# Check for debug statements
if grep -r "console.log\|debugger\|binding.pry" --include="*.js" --include="*.ts" --include="*.rb" src/; then
echo "Remove debug statements before committing."
exit 1
fi
Using Husky
// package.json
{
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"lint-staged": {
"*.{js,ts,tsx}": ["eslint --fix", "prettier --write"],
"*.{css,scss}": ["prettier --write"]
}
}
Commitlint Configuration
// commitlint.config.js
module.exports = {
extends: ['@commitlint/config-conventional'],
rules: {
'type-enum': [
2,
'always',
['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore', 'revert']
],
'subject-max-length': [2, 'always', 72],
'body-max-line-length': [2, 'always', 100]
}
};
Release Workflow
Automated Release with Tags
# Create annotated tag
git tag -a v1.0.0 -m "Release version 1.0.0"
# Push tag
git push origin v1.0.0
# Create release from tag (GitHub CLI)
gh release create v1.0.0 \
--title "Release 1.0.0" \
--notes "Release notes here" \
--target main
Changelog Generation
# Using conventional-changelog
npx conventional-changelog -p angular -i CHANGELOG.md -s
# Using git-cliff
git cliff -o CHANGELOG.md
Common Git Operations
Rebase vs Merge
# Rebase (clean history)
git checkout feature/my-feature
git rebase main
git push --force-with-lease
# Merge (preserve history)
git checkout main
git merge feature/my-feature
# Squash merge (single commit)
git merge --squash feature/my-feature
git commit -m "feat: add feature X"
Cherry Pick
# Apply specific commit to current branch
git cherry-pick abc123
# Cherry pick range
git cherry-pick abc123..def456
# Cherry pick without committing
git cherry-pick -n abc123
Interactive Rebase
# Clean up last 3 commits
git rebase -i HEAD~3
# In editor:
# pick abc123 First commit
# squash def456 Second commit
# reword ghi789 Third commit
Common Issues
Issue: Merge Conflicts
Problem: Conflicts when merging branches Solution: Rebase frequently, communicate with team, use smaller PRs
Issue: Diverged Branches
Problem: Local branch far behind remote
Solution: git pull --rebase or git fetch && git rebase origin/main
Issue: Accidental Commit to Wrong Branch
Problem: Committed to main instead of feature
Solution: git reset HEAD~1, checkout correct branch, recommit
Best Practices
- Keep branches short-lived (< 1 week)
- Write meaningful commit messages
- Use PR templates consistently
- Require code reviews
- Protect main/master branch
- Automate checks with CI
- Squash merge for clean history
- Delete branches after merge
Related Skills
- semantic-versioning – Version management
- github-actions – CI/CD automation
- feature-flags – Feature management