{"id":"1da9a35e-7c05-4330-87f9-d362ea491e0f","shortId":"2Hsut8","kind":"skill","title":"git-workflow","tagline":"Git best practices, branching strategies, commit conventions, and PR workflows. Use when reviewing git history, writing commits, setting up branching strategy, or improving git practices. Triggers on \"git best practices\", \"commit message\", \"branching strategy\", or \"PR workflow\".","description":"# Git Workflow\n\nGit best practices, commit conventions, branching strategies, and pull request workflows. Guidelines for maintaining a clean, useful git history.\n\n## When to Apply\n\nReference these guidelines when:\n- Writing commit messages\n- Creating branches\n- Setting up git workflows\n- Reviewing pull requests\n- Maintaining git history\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | Commit Messages | CRITICAL | `commit-` |\n| 2 | Branching Strategy | HIGH | `branch-` |\n| 3 | Pull Requests | HIGH | `pr-` |\n| 4 | History Management | MEDIUM | `history-` |\n| 5 | Collaboration | MEDIUM | `collab-` |\n\n## Quick Reference\n\n### 1. Commit Messages (CRITICAL)\n\n- `commit-conventional` - Use conventional commits\n- `commit-atomic` - Atomic commits (one logical change)\n- `commit-present-tense` - Use imperative present tense\n- `commit-meaningful` - Descriptive, meaningful messages\n- `commit-body` - Add body for complex changes\n- `commit-references` - Reference issues/tickets\n- `commit-git-hooks` - Enforce standards with Husky + commitlint\n\n### 2. Branching Strategy (HIGH)\n\n- `branch-naming` - Consistent branch naming\n- `branch-feature` - Feature branch workflow\n- `branch-main-protected` - Protect main branch\n- `branch-short-lived` - Keep branches short-lived\n- `branch-delete-merged` - Delete merged branches\n- `branch-release` - Release branch strategy\n- `branch-workflow-strategies` - GitFlow vs GitHub Flow vs Trunk-Based\n- `branch-monorepo` - Monorepo git workflows\n\n### 3. Pull Requests (HIGH)\n\n- `pr-small` - Keep PRs small and focused\n- `pr-description` - Write clear descriptions\n- `pr-reviewers` - Request appropriate reviewers\n- `pr-ci-pass` - Ensure CI passes\n- `pr-squash` - Squash when appropriate\n- `pr-draft` - Use draft PRs for WIP and early feedback\n\n### 4. History Management (MEDIUM)\n\n- `history-rebase` - Rebase vs merge\n- `history-no-force-push` - Avoid force push to shared branches\n- `history-clean` - Keep history clean\n- `history-tags` - Use tags for releases\n- `history-worktree` - Work on multiple branches with git worktree\n\n### 5. Collaboration (MEDIUM)\n\n- `collab-code-review` - Effective code reviews\n- `collab-conflicts` - Handle merge conflicts\n- `collab-communication` - Communicate changes\n- `collab-gitignore` - .gitignore best practices\n\n## Essential Guidelines\n\n### Conventional Commits\n\n```\n# Format\n<type>(<scope>): <subject>\n\n<body>\n\n<footer>\n```\n\n#### Types\n\n| Type | Description |\n|------|-------------|\n| `feat` | New feature |\n| `fix` | Bug fix |\n| `docs` | Documentation only |\n| `style` | Formatting, no code change |\n| `refactor` | Code change, no feature/fix |\n| `perf` | Performance improvement |\n| `test` | Adding/updating tests |\n| `chore` | Maintenance, dependencies |\n| `ci` | CI/CD changes |\n| `build` | Build system changes |\n| `revert` | Revert previous commit |\n\n#### Examples\n\n```bash\n# ✅ Good commit messages\nfeat(auth): add password reset functionality\n\nfix(cart): resolve quantity update race condition\n\ndocs(readme): add installation instructions\n\nrefactor(api): extract validation into middleware\n\ntest(user): add unit tests for registration\n\nchore(deps): update dependencies to latest versions\n\n# With body and footer\nfeat(orders): implement order cancellation\n\nAdd ability for users to cancel pending orders within 24 hours.\nCancelled orders trigger refund process automatically.\n\nCloses #123\nBREAKING CHANGE: Order status enum now includes 'cancelled'\n\n# ❌ Bad commit messages\nfix bug\nupdate\nWIP\nasdfasdf\nchanges\nmisc fixes\n```\n\n### Branch Naming\n\n```bash\n# ✅ Good branch names\nfeature/user-authentication\nfeature/JIRA-123-password-reset\nfix/cart-total-calculation\nfix/issue-456-login-redirect\nhotfix/security-patch\ndocs/api-documentation\nrefactor/database-queries\nchore/update-dependencies\n\n# ❌ Bad branch names\nnew-feature\njohn-branch\ntest\nfix\ntemp\nasdf\n```\n\n### Branch Workflow\n\n```bash\n# Main branches\nmain          # Production-ready code\ndevelop       # Integration branch (optional)\n\n# Supporting branches\nfeature/*     # New features\nfix/*         # Bug fixes\nhotfix/*      # Production hotfixes\nrelease/*     # Release preparation\n\n# Workflow\ngit checkout main\ngit pull origin main\ngit checkout -b feature/user-profile\n\n# Work on feature...\ngit add .\ngit commit -m \"feat(profile): add profile page\"\n\n# Keep branch updated\ngit fetch origin\ngit rebase origin/main\n\n# Push and create PR\ngit push -u origin feature/user-profile\n```\n\n### Atomic Commits\n\n```bash\n# ❌ One commit doing multiple things\ngit commit -m \"Add login, fix header, update deps\"\n\n# ✅ Separate commits for each change\ngit commit -m \"feat(auth): add login page\"\ngit commit -m \"fix(header): correct navigation alignment\"\ngit commit -m \"chore(deps): update React to v18.2\"\n```\n\n### Commit Frequently, Push Regularly\n\n```bash\n# ✅ Small, frequent commits\ngit commit -m \"feat(cart): add product to cart\"\ngit commit -m \"feat(cart): display cart item count\"\ngit commit -m \"feat(cart): implement remove item\"\ngit commit -m \"test(cart): add unit tests\"\n\n# ❌ One massive commit\ngit commit -m \"feat: implement entire shopping cart\"\n```\n\n### Pull Request Best Practices\n\n#### PR Title\n\n```\n# Format (like commit)\n<type>(<scope>): <description>\n\n# ✅ Good PR titles\nfeat(auth): implement OAuth2 login\nfix(checkout): resolve payment processing error\ndocs(api): add endpoint documentation\n\n# ❌ Bad PR titles\nUpdate\nFix stuff\nWIP\n```\n\n#### PR Description Template\n\n```markdown\n## Summary\nBrief description of what this PR does.\n\n## Changes\n- Added user authentication endpoints\n- Implemented JWT token generation\n- Added password hashing with bcrypt\n\n## Testing\n- [ ] Unit tests pass\n- [ ] Integration tests pass\n- [ ] Manual testing completed\n\n## Screenshots (if UI changes)\n[Add screenshots here]\n\n## Related Issues\nCloses #123\nRelated to #456\n\n## Checklist\n- [ ] Code follows project conventions\n- [ ] Self-review completed\n- [ ] Tests added/updated\n- [ ] Documentation updated\n```\n\n### Keep PRs Small\n\n```\n# ✅ Focused PRs\nPR #1: Add user model and migrations\nPR #2: Implement user registration endpoint\nPR #3: Add email verification\nPR #4: Implement login/logout\n\n# ❌ Large unfocused PR\nPR #1: Add entire user authentication system\n       (2000+ lines, 50+ files)\n```\n\n### Rebase vs Merge\n\n```bash\n# ✅ Rebase for feature branches (clean history)\ngit checkout feature/my-feature\ngit fetch origin\ngit rebase origin/main\n# Resolve any conflicts\ngit push --force-with-lease  # Only your branch!\n\n# ✅ Merge for integrating to main (preserve context)\ngit checkout main\ngit merge --no-ff feature/my-feature\n# Creates merge commit, preserves branch history\n\n# ❌ Never force push to shared branches\ngit push --force origin main  # NEVER DO THIS\n```\n\n### Interactive Rebase (Clean Up)\n\n```bash\n# Before pushing, clean up commits\ngit rebase -i HEAD~5\n\n# In editor:\npick abc123 feat: add login page\nsquash def456 fix typo\nsquash ghi789 more fixes\npick jkl012 feat: add logout\n\n# Result: clean history with meaningful commits\n```\n\n### Handling Conflicts\n\n```bash\n# During rebase\ngit rebase origin/main\n# CONFLICT in file.ts\n\n# 1. Open conflicted files\n# 2. Resolve conflicts (remove markers)\n# 3. Stage resolved files\ngit add file.ts\n\n# 4. Continue rebase\ngit rebase --continue\n\n# Or abort if needed\ngit rebase --abort\n```\n\n### Git Hooks\n\n```bash\n# .husky/pre-commit\n#!/bin/sh\nnpm run lint\nnpm run test:unit\n\n# .husky/commit-msg\n#!/bin/sh\nnpx commitlint --edit $1\n\n# commitlint.config.js\nmodule.exports = {\n  extends: ['@commitlint/config-conventional'],\n};\n```\n\n### Tagging Releases\n\n```bash\n# Semantic versioning tags\ngit tag -a v1.0.0 -m \"Release version 1.0.0\"\ngit push origin v1.0.0\n\n# List tags\ngit tag -l \"v1.*\"\n\n# Tag format\nv1.0.0    # Major.Minor.Patch\nv1.0.0-beta.1  # Pre-release\nv1.0.0-rc.1    # Release candidate\n```\n\n### .gitignore Best Practices\n\n```gitignore\n# Dependencies\nnode_modules/\nvendor/\n\n# Build outputs\ndist/\nbuild/\n.next/\n\n# Environment files\n.env\n.env.local\n.env.*.local\n\n# IDE\n.idea/\n.vscode/\n*.swp\n\n# OS files\n.DS_Store\nThumbs.db\n\n# Logs\n*.log\nlogs/\n\n# Test coverage\ncoverage/\n\n# Cache\n.cache/\n*.cache\n```\n\n### Useful Git Commands\n\n```bash\n# View commit history\ngit log --oneline --graph --all\n\n# See what changed\ngit diff --staged\ngit diff HEAD~1\n\n# Undo last commit (keep changes)\ngit reset --soft HEAD~1\n\n# Discard local changes\ngit checkout -- file.ts\ngit restore file.ts  # Git 2.23+\n\n# Stash changes\ngit stash\ngit stash pop\ngit stash list\n\n# Cherry-pick commit\ngit cherry-pick abc123\n\n# Find who changed a line\ngit blame file.ts\n\n# Search commits\ngit log --grep=\"fix\"\ngit log -S \"functionName\"\n```\n\n## Output Format\n\nWhen reviewing git practices, output findings:\n\n```\n[category] Description of issue or suggestion\n```\n\nExample:\n```\n[commit] Use imperative mood: \"Add feature\" not \"Added feature\"\n[branch] Branch name 'test' should follow pattern: feature/description\n[pr] PR is too large (50+ files), consider splitting\n```\n\n## How to Use\n\nRead individual rule files for detailed explanations:\n\n```\nrules/commit-conventional-format.md\nrules/branch-naming-convention.md\nrules/pr-small-focused.md\n```\n\n## References\n\n- [Git Official Documentation](https://git-scm.com/doc) - Comprehensive Git documentation\n- [Pro Git Book](https://git-scm.com/book/en/v2) - The complete Pro Git book\n- [Conventional Commits](https://www.conventionalcommits.org) - Commit message specification\n- [GitHub Flow](https://docs.github.com/en/get-started/quickstart/github-flow) - Lightweight workflow\n- [How to Write a Git Commit Message](https://chris.beams.io/posts/git-commit/) - Commit message guide\n- [Google Code Review Practices](https://google.github.io/eng-practices/review/) - Code review best practices\n\n## Examples from Well-Known Projects\n\nLearn from projects with excellent git practices:\n- **Linux Kernel** - Detailed commit messages and patch workflow\n- **React** - Conventional commits and thorough PR reviews\n- **Vue.js** - Clean commit history and good PR templates\n- **TypeScript** - Structured branching and clear release process\n- **Next.js** - Conventional commits and automated releases\n\n## Configuration Examples\n\n### Commitlint\n\n```javascript\n// commitlint.config.js\nmodule.exports = {\n  extends: ['@commitlint/config-conventional'],\n  rules: {\n    'type-enum': [\n      2,\n      'always',\n      ['feat', 'fix', 'docs', 'style', 'refactor', 'perf', 'test', 'chore', 'ci', 'build', 'revert']\n    ],\n    'subject-max-length': [2, 'always', 72],\n    'body-max-line-length': [2, 'always', 100]\n  }\n};\n```\n\n### Husky Git Hooks\n\n```bash\n# .husky/commit-msg\n#!/bin/sh\nnpx commitlint --edit $1\n\n# .husky/pre-commit\n#!/bin/sh\nnpm run lint\nnpm test\n```\n\n### GitHub PR Template\n\n```markdown\n# .github/PULL_REQUEST_TEMPLATE.md\n## Summary\nBrief description of changes\n\n## Changes\n- List key changes\n- One per line\n\n## Testing\n- [ ] Unit tests pass\n- [ ] Integration tests pass\n- [ ] Manual testing completed\n\n## Related\nCloses #issue-number\n```\n\n---\n\n## Metadata\n\n**Skill Version:** 1.2.0\n**Last Updated:** 2026-03-08\n**Total Rules:** 31\n**Categories:** 5 (Commit Messages, Branching Strategy, Pull Requests, History Management, Collaboration)\n\n**Compatible With:**\n- Git 2.0+\n- GitHub, GitLab, Bitbucket, Azure DevOps\n\n**Recommended Tools:**\n- [Git](https://git-scm.com/) - Version control system\n- [GitHub CLI](https://cli.github.com/) - GitHub command-line tool\n- [Commitlint](https://commitlint.js.org/) - Commit message linter\n- [Husky](https://typicode.github.io/husky/) - Git hooks\n- [Semantic Release](https://semantic-release.gitbook.io/) - Automated versioning\n\n---\n\n## License\n\nMIT License. This skill is provided as-is for educational and development purposes.","tags":["git","workflow","agent","skills","asyrafhussin","agent-rules","agent-skills","ai-agents","ai-slop","claude-code","code-quality","code-review"],"capabilities":["skill","source-asyrafhussin","skill-git-workflow","topic-agent-rules","topic-agent-skills","topic-ai-agents","topic-ai-slop","topic-claude-code","topic-code-quality","topic-code-review","topic-codex","topic-cursor","topic-laravel","topic-nodejs","topic-react"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/AsyrafHussin/agent-skills/git-workflow","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add AsyrafHussin/agent-skills","source_repo":"https://github.com/AsyrafHussin/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.469","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 39 github stars · SKILL.md body (11,692 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T18:58:24.248Z","embedding":null,"createdAt":"2026-05-16T18:57:14.027Z","updatedAt":"2026-05-18T18:58:24.248Z","lastSeenAt":"2026-05-18T18:58:24.248Z","tsv":"'-03':1408 '-08':1409 '/)':1438,1446,1455,1469 '/bin/sh':981,990,1357,1363 '/book/en/v2)':1220 '/doc)':1211 '/en/get-started/quickstart/github-flow)':1236 '/eng-practices/review/)':1258 '/husky/)':1462 '/posts/git-commit/)':1248 '1':92,118,793,818,948,994,1361 '1.0.0':1012 '1.2.0':1404 '100':1351 '123':471,770 '2':97,172,800,952,1324,1341,1349 '2.0':1427 '2.23':1113 '2000':824 '2026':1407 '24':462 '3':102,235,806,957 '31':1412 '4':107,283,811,964 '456':773 '5':112,327,1414 '50':826,1188 '72':1343 'abc123':913,1132 'abil':454 'abort':971,976 'ad':737,745,1173 'add':153,408,421,432,453,562,568,600,616,649,675,714,764,794,807,819,915,929,962,1170 'added/updated':784 'adding/updating':385 'align':626 'alway':1325,1342,1350 'api':425,713 'appli':64 'appropri':257,271 'as-i':1479 'asdf':517 'asdfasdf':487 'atom':130,131,589 'auth':407,615,702 'authent':739,822 'autom':1310,1470 'automat':469 'avoid':298 'azur':1431 'b':556 'bad':480,505,717 'base':228 'bash':402,493,520,591,640,831,899,939,979,1001,1074,1355 'bcrypt':749 'best':5,32,44,352,691,1035,1261 'bitbucket':1430 'blame':1139 'bodi':152,154,445,1345 'body-max-line-length':1344 'book':1217,1225 'branch':7,23,36,48,73,98,101,173,177,180,183,186,189,194,196,200,205,210,212,215,218,230,303,323,491,495,506,513,518,522,530,533,572,835,858,879,886,1175,1176,1301,1417 'branch-delete-merg':204 'branch-featur':182 'branch-main-protect':188 'branch-monorepo':229 'branch-nam':176 'branch-releas':211 'branch-short-liv':195 'branch-workflow-strategi':217 'break':472 'brief':729,1375 'bug':366,484,538 'build':393,394,1042,1045,1335 'cach':1068,1069,1070 'cancel':452,458,464,479 'candid':1033 'cart':413,648,652,657,659,666,674,688 'categori':85,89,1159,1413 'chang':135,157,347,375,378,392,396,473,488,610,736,763,1085,1097,1105,1115,1135,1378,1379,1382 'checklist':774 'checkout':548,555,707,839,867,1107 'cherri':1125,1130 'cherry-pick':1124,1129 'chore':387,437,630,1333 'chore/update-dependencies':504 'chris.beams.io':1247 'chris.beams.io/posts/git-commit/)':1246 'ci':261,264,390,1334 'ci/cd':391 'clean':58,306,309,836,897,902,932,1292 'clear':251,1303 'cli':1443 'cli.github.com':1445 'cli.github.com/)':1444 'close':470,769,1397 'code':332,335,374,377,527,775,1253,1259 'collab':115,331,338,344,349 'collab-code-review':330 'collab-commun':343 'collab-conflict':337 'collab-gitignor':348 'collabor':113,328,1423 'command':1073,1449 'command-lin':1448 'commit':9,20,34,46,70,93,96,119,123,127,129,132,137,145,151,159,164,357,400,404,481,564,590,593,598,607,612,620,628,636,643,645,654,663,671,680,682,697,877,904,936,1076,1095,1127,1142,1166,1227,1229,1244,1249,1279,1286,1293,1308,1415,1456 'commit-atom':128 'commit-bodi':150 'commit-convent':122 'commit-git-hook':163 'commit-meaning':144 'commit-present-tens':136 'commit-refer':158 'commitlint':171,992,1314,1359,1452 'commitlint.config.js':995,1316 'commitlint.js.org':1454 'commitlint.js.org/)':1453 'commitlint/config-conventional':998,1319 'communic':345,346 'compat':1424 'complet':759,782,1222,1395 'complex':156 'comprehens':1212 'condit':418 'configur':1312 'conflict':339,342,849,938,945,950,954 'consid':1190 'consist':179 'context':865 'continu':965,969 'control':1440 'convent':10,47,124,126,356,778,1226,1285,1307 'correct':624 'count':661 'coverag':1066,1067 'creat':72,582,875 'critic':95,121 'def456':919 'delet':206,208 'dep':438,605,631 'depend':389,440,1038 'descript':147,249,252,361,725,730,1160,1376 'detail':1200,1278 'develop':528,1485 'devop':1432 'diff':1087,1090 'discard':1103 'display':658 'dist':1044 'doc':368,419,712,1328 'docs.github.com':1235 'docs.github.com/en/get-started/quickstart/github-flow)':1234 'docs/api-documentation':502 'document':369,716,785,1208,1214 'draft':274,276 'ds':1059 'earli':281 'edit':993,1360 'editor':911 'educ':1483 'effect':334 'email':808 'endpoint':715,740,804 'enforc':167 'ensur':263 'entir':686,820 'enum':476,1323 'env':1049,1051 'env.local':1050 'environ':1047 'error':711 'essenti':354 'exampl':401,1165,1263,1313 'excel':1273 'explan':1201 'extend':997,1318 'extract':426 'feat':362,406,448,566,614,647,656,665,684,701,914,928,1326 'featur':184,185,364,510,534,536,560,834,1171,1174 'feature/description':1182 'feature/fix':380 'feature/jira-123-password-reset':498 'feature/my-feature':840,874 'feature/user-authentication':497 'feature/user-profile':557,588 'feedback':282 'fetch':575,842 'ff':873 'file':827,951,960,1048,1058,1189,1198 'file.ts':947,963,1108,1111,1140 'find':1133,1158 'fix':365,367,412,483,490,515,537,539,602,622,706,721,920,925,1146,1327 'fix/cart-total-calculation':499 'fix/issue-456-login-redirect':500 'flow':224,1233 'focus':246,790 'follow':776,1180 'footer':447 'forc':296,299,853,882,889 'force-with-leas':852 'format':358,372,695,1024,1152 'frequent':637,642 'function':411 'functionnam':1150 'generat':744 'ghi789':923 'git':2,4,17,27,31,41,43,60,76,82,165,233,325,547,550,554,561,563,574,577,584,597,611,619,627,644,653,662,670,681,838,841,844,850,866,869,887,905,942,961,967,974,977,1005,1013,1019,1072,1078,1086,1089,1098,1106,1109,1112,1116,1118,1121,1128,1138,1143,1147,1155,1206,1213,1216,1224,1243,1274,1353,1426,1435,1463 'git-scm.com':1210,1219,1437 'git-scm.com/)':1436 'git-scm.com/book/en/v2)':1218 'git-scm.com/doc)':1209 'git-workflow':1 'gitflow':221 'github':223,1232,1369,1428,1442,1447 'github/pull_request_template.md':1373 'gitignor':350,351,1034,1037 'gitlab':1429 'good':403,494,698,1296 'googl':1252 'google.github.io':1257 'google.github.io/eng-practices/review/)':1256 'graph':1081 'grep':1145 'guid':1251 'guidelin':54,67,355 'handl':340,937 'hash':747 'head':908,1091,1101 'header':603,623 'high':100,105,175,238 'histori':18,61,83,108,111,284,288,294,305,308,311,318,837,880,933,1077,1294,1421 'history-clean':304 'history-no-force-push':293 'history-rebas':287 'history-tag':310 'history-worktre':317 'hook':166,978,1354,1464 'hotfix':540,542 'hotfix/security-patch':501 'hour':463 'huski':170,1352,1459 'husky/commit-msg':989,1356 'husky/pre-commit':980,1362 'ide':1053 'idea':1054 'impact':90 'imper':141,1168 'implement':450,667,685,703,741,801,812 'improv':26,383 'includ':478 'individu':1196 'instal':422 'instruct':423 'integr':529,754,861,1390 'interact':895 'issu':768,1162,1399 'issue-numb':1398 'issues/tickets':162 'item':660,669 'javascript':1315 'jkl012':927 'john':512 'john-branch':511 'jwt':742 'keep':199,242,307,571,787,1096 'kernel':1277 'key':1381 'known':1267 'l':1021 'larg':814,1187 'last':1094,1405 'latest':442 'learn':1269 'leas':855 'length':1340,1348 'licens':1472,1474 'lightweight':1237 'like':696 'line':825,1137,1347,1385,1450 'lint':984,1366 'linter':1458 'linux':1276 'list':1017,1123,1380 'live':198,203 'local':1052,1104 'log':1062,1063,1064,1079,1144,1148 'logic':134 'login':601,617,705,916 'login/logout':813 'logout':930 'm':565,599,613,621,629,646,655,664,672,683,1009 'main':190,193,521,523,549,553,863,868,891 'maintain':56,81 'mainten':388 'major.minor.patch':1026 'manag':109,285,1422 'manual':757,1393 'markdown':727,1372 'marker':956 'massiv':679 'max':1339,1346 'meaning':146,148,935 'medium':110,114,286,329 'merg':207,209,292,341,830,859,870,876 'messag':35,71,94,120,149,405,482,1230,1245,1250,1280,1416,1457 'metadata':1401 'middlewar':429 'migrat':798 'misc':489 'mit':1473 'model':796 'modul':1040 'module.exports':996,1317 'monorepo':231,232 'mood':1169 'multipl':322,595 'name':178,181,492,496,507,1177 'navig':625 'need':973 'never':881,892 'new':363,509,535 'new-featur':508 'next':1046 'next.js':1306 'no-ff':871 'node':1039 'npm':982,985,1364,1367 'npx':991,1358 'number':1400 'oauth2':704 'offici':1207 'one':133,592,678,1383 'onelin':1080 'open':949 'option':531 'order':449,451,460,465,474 'origin':552,576,587,843,890,1015 'origin/main':579,846,944 'os':1057 'output':1043,1151,1157 'page':570,618,917 'pass':262,265,753,756,1389,1392 'password':409,746 'patch':1282 'pattern':1181 'payment':709 'pend':459 'per':1384 'perf':381,1331 'perform':382 'pick':912,926,1126,1131 'pop':1120 'pr':12,39,106,240,248,254,260,267,273,583,693,699,718,724,734,792,799,805,810,816,817,1183,1184,1289,1297,1370 'pr-ci-pass':259 'pr-descript':247 'pr-draft':272 'pr-review':253 'pr-small':239 'pr-squash':266 'practic':6,28,33,45,353,692,1036,1156,1255,1262,1275 'pre':1029 'pre-releas':1028 'prefix':91 'prepar':545 'present':138,142 'preserv':864,878 'previous':399 'prioriti':87,88 'pro':1215,1223 'process':468,710,1305 'product':525,541,650 'production-readi':524 'profil':567,569 'project':777,1268,1271 'protect':191,192 'provid':1478 'prs':243,277,788,791 'pull':51,79,103,236,551,689,1419 'purpos':1486 'push':297,300,580,585,638,851,883,888,901,1014 'quantiti':415 'quick':116 'race':417 'react':633,1284 'read':1195 'readi':526 'readm':420 'rebas':289,290,578,828,832,845,896,906,941,943,966,968,975 'recommend':1433 'refactor':376,424,1330 'refactor/database-queries':503 'refer':65,117,160,161,1205 'refund':467 'registr':436,803 'regular':639 'relat':767,771,1396 'releas':213,214,316,543,544,1000,1010,1030,1032,1304,1311,1466 'remov':668,955 'request':52,80,104,237,256,690,1420 'reset':410,1099 'resolv':414,708,847,953,959 'restor':1110 'result':931 'revert':397,398,1336 'review':16,78,255,258,333,336,781,1154,1254,1260,1290 'rule':84,1197,1320,1411 'rules/branch-naming-convention.md':1203 'rules/commit-conventional-format.md':1202 'rules/pr-small-focused.md':1204 'run':983,986,1365 'screenshot':760,765 'search':1141 'see':1083 'self':780 'self-review':779 'semant':1002,1465 'semantic-release.gitbook.io':1468 'semantic-release.gitbook.io/)':1467 'separ':606 'set':21,74 'share':302,885 'shop':687 'short':197,202 'short-liv':201 'skill':1402,1476 'skill-git-workflow' 'small':241,244,641,789 'soft':1100 'source-asyrafhussin' 'specif':1231 'split':1191 'squash':268,269,918,922 'stage':958,1088 'standard':168 'stash':1114,1117,1119,1122 'status':475 'store':1060 'strategi':8,24,37,49,99,174,216,220,1418 'structur':1300 'stuff':722 'style':371,1329 'subject':1338 'subject-max-length':1337 'suggest':1164 'summari':728,1374 'support':532 'swp':1056 'system':395,823,1441 'tag':312,314,999,1004,1006,1018,1020,1023 'temp':516 'templat':726,1298,1371 'tens':139,143 'test':384,386,430,434,514,673,677,750,752,755,758,783,987,1065,1178,1332,1368,1386,1388,1391,1394 'thing':596 'thorough':1288 'thumbs.db':1061 'titl':694,700,719 'token':743 'tool':1434,1451 'topic-agent-rules' 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-slop' 'topic-claude-code' 'topic-code-quality' 'topic-code-review' 'topic-codex' 'topic-cursor' 'topic-laravel' 'topic-nodejs' 'topic-react' 'total':1410 'trigger':29,466 'trunk':227 'trunk-bas':226 'type':359,360,1322 'type-enum':1321 'typescript':1299 'typicode.github.io':1461 'typicode.github.io/husky/)':1460 'typo':921 'u':586 'ui':762 'undo':1093 'unfocus':815 'unit':433,676,751,988,1387 'updat':416,439,485,573,604,632,720,786,1406 'use':14,59,125,140,275,313,1071,1167,1194 'user':431,456,738,795,802,821 'v1':1022 'v1.0.0':1008,1016,1025 'v1.0.0-beta.1':1027 'v1.0.0-rc.1':1031 'v18.2':635 'valid':427 'vendor':1041 'verif':809 'version':443,1003,1011,1403,1439,1471 'view':1075 'vs':222,225,291,829 'vscode':1055 'vue.js':1291 'well':1266 'well-known':1265 'wip':279,486,723 'within':461 'work':320,558 'workflow':3,13,40,42,53,77,187,219,234,519,546,1238,1283 'worktre':319,326 'write':19,69,250,1241 'www.conventionalcommits.org':1228 '~1':1092,1102 '~5':909","prices":[{"id":"a5b535fc-5494-463f-a215-ebfb0413e9d7","listingId":"1da9a35e-7c05-4330-87f9-d362ea491e0f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"AsyrafHussin","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-16T18:57:14.027Z"}],"sources":[{"listingId":"1da9a35e-7c05-4330-87f9-d362ea491e0f","source":"github","sourceId":"AsyrafHussin/agent-skills/git-workflow","sourceUrl":"https://github.com/AsyrafHussin/agent-skills/tree/main/skills/git-workflow","isPrimary":false,"firstSeenAt":"2026-05-16T18:57:14.027Z","lastSeenAt":"2026-05-18T18:58:24.248Z"}],"details":{"listingId":"1da9a35e-7c05-4330-87f9-d362ea491e0f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"AsyrafHussin","slug":"git-workflow","github":{"repo":"AsyrafHussin/agent-skills","stars":39,"topics":["agent-rules","agent-skills","ai-agents","ai-slop","claude-code","code-quality","code-review","codex","cursor","laravel","nodejs","react","technical-debt","typescript","windsurf"],"license":"mit","html_url":"https://github.com/AsyrafHussin/agent-skills","pushed_at":"2026-05-16T19:24:02Z","description":"Agent skills for AI coding agents (Claude Code, Cursor, Codex, Windsurf) — Laravel, React, TypeScript, MySQL, code quality, technical debt, documentation, and security.","skill_md_sha":"cb92bd24b4df1dae0195165d9e5eaba37edf7296","skill_md_path":"skills/git-workflow/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/AsyrafHussin/agent-skills/tree/main/skills/git-workflow"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"git-workflow","license":"MIT","description":"Git best practices, branching strategies, commit conventions, and PR workflows. Use when reviewing git history, writing commits, setting up branching strategy, or improving git practices. Triggers on \"git best practices\", \"commit message\", \"branching strategy\", or \"PR workflow\"."},"skills_sh_url":"https://skills.sh/AsyrafHussin/agent-skills/git-workflow"},"updatedAt":"2026-05-18T18:58:24.248Z"}}