git-commit-workflow
npx skills add https://github.com/re2zero/deepin-skills --skill git-commit-workflow
Agent 安装分布
Skill 文档
Git Commit Workflow
You are an expert in Git commit workflows with structured commit message generation. Follow this procedure when assisting users with git operations.
Core Principles
- Never auto-commit: Always get explicit user confirmation before executing
git commit - Interactive staging: Ask user to stage files if there are any unstaged changes, regardless of staged status
- Structured messages: Generate commit messages following the defined format
- PMS/Issue tracking: Ask for PMS and GitHub Issue numbers, parse them correctly
Workflow Steps
Step 1: Check Git Status
When user wants to commit, first check the current git status:
git status --porcelain
Interpret the output:
- First column: staged status (
M=modified,A=added,D=deleted,R=renamed) - Second column: working tree status
- Files with no first column: untracked/new files
Present the results to user with file lists separated by:
- Staged files: files with entries in first column (already staged)
- Unstaged files: files with entries in second column (changes in working directory) – includes both new and modified files
Action guidance:
- No staged, no unstaged â Inform user, ask to make changes first
- Has unstaged (regardless of staged status) â Must ask user which files to stage
- No unstaged, has staged â Ready for diff review (skip staging)
Step 2: Stage Files (if needed)
User confirms which files to stage. Stage them:
git add <path1> <path2> ...
Ask user: “ç°å¨è¯·æ¥çæååºçå·®å¼å¹¶çææäº¤ä¿¡æ¯è稿ã”
Step 3: Get Staged Diff and Generate Draft
Retrieve the staged changes:
git diff --staged
Analyze the diff and generate a commit message draft following the specified format.
Commit Message Format
Follow this exact structure:
<type>[optional scope]: <english description> [MUST NOT exceed 80 chars]
[English body - optional, max 80 chars per line]
[Chinese body - optional, max 80 chars per line, must pair with English]
Log: [short description in Chinese]
PMS: <BUG-number or TASK-number> or omit this line if user has none
Issue: Fixes #<number> or omit this line if user has none
Influence: [explain impact in Chinese]
Type Options
feat: A new featurefix: A bug fixdocs: Documentation only changesstyle: Changes that do not affect code meaning (formatting, spacing)refactor: Code refactoring without feature changesperf: Performance improvementstest: Adding or updating testschore: Maintenance tasks (build, deps, etc.)ci: CI/CD configuration changes
Constraints
- Body lines must not exceed 80 characters
- English and Chinese body must appear in pairs if provided
- Log should be concise Chinese description
Step 3.1: Handle PMS Number
You MUST ask the user for PMS number. Accept these formats:
- PMS URL:
https://pms.uniontech.com/task-view-385999.htmlorhttps://pms.uniontech.com/bug-view-385999.html - Direct format:
BUG-123456orTASK-123456
Parse the input using your own understanding (no scripts needed):
- If URL contains
/task-view-â extract the number, format asTASK-xxxxxx - If URL contains
/bug-view-â extract the number, format asBUG-xxxxxx - If already in correct format (starting with BUG- or TASK-), use as-is
- If user provides just a number without prefix, ask them which type it is
Examples:
https://pms.uniontech.com/task-view-385999.htmlâTASK-385999https://pms.uniontech.com/bug-view-123456.htmlâBUG-123456TASK-789012âTASK-789012
If user explicitly states they have no PMS number, remove the entire PMS: line from the commit message.
Step 3.2: Handle GitHub Issue Number
You MUST ask the user for GitHub Issue number. Accept these formats:
- Issue URL:
https://github.com/owner/repo/issues/183 - Direct format:
#183(for current repo) orowner/repo#183(for other repos)
Parse the input using your own understanding (no scripts needed):
- From URL: extract owner, repo name, and issue number from the path
- From direct input: parse the format
- Determine if it’s the current repository:
- Run
git remote get-url originto check the current repo name - If the issue’s repo matches, use
#<number>format - If different, use
owner/repo#<number>format
- Run
- If just a number without
#, infer it’s for current repo:#183
Examples:
- For repo
Pimzino/spec-workflow-mcp:https://github.com/Pimzino/spec-workflow-mcp/issues/183â#183#183â#183183â#183https://github.com/other/repo/issues/42âother/repo#42
If user explicitly states they have no Issue number, remove the entire Issue: line from the commit message.
Step 4: User Confirmation
Present the complete commit message draft in this format:
=== Commit Message Draft ===
<full draft content>
=== End Draft ===
Confirm? (Yes/No/Modify)
- If user confirms with “Yes” â proceed to commit
- If user says “No” â ask for feedback and regenerate
- If user wants to “Modify” â incorporate their changes and present again for confirmation
Important: You must get explicit user approval before committing. Never auto-commit.
Step 5: Execute Commit
After user confirms, execute:
git commit -m "<commit message>"
Return success message to user.
Handling Special Cases
Initial Commit
If repository has no commits yet (detached HEAD or git status shows no HEAD), the first commit will be:
git commit -m "<commit message>"
This works without parent commits automatically.
Empty Diff
If git diff --staged returns no output, inform user that there are no staged changes and they need to stage files first.
Examples
Example 1: Feature with PMS and Issue
User request: “帮ææäº¤è¿ä¸ªåè½çä»£ç ”
- Check status â User stages
src/auth.rsandsrc/auth_test.rs - Diff shows authentication logic addition
- Provide draft:
feat(auth): add JWT authentication support
Add JWT-based authentication middleware with token validation.
æ·»å JWT认è¯ä¸é´ä»¶ï¼æ¯æä»¤çéªè¯ã
Log: æ·»å JWT认è¯åè½
PMS: TASK-385999
Issue: Fixes #183
Influence: ææAPI请æ±ç°å¨éè¦ææçJWT令çéè¿è®¤è¯ï¼æåç³»ç»å®å
¨æ§ã
- User confirms “å¯ä»¥æäº¤”
- Execute
git commit
Example 2: Bug fix without PMS
User request: “commit this bug fix”
- User stages fix, no PMS or Issue
- Provide draft:
fix(user): resolve incorrect user role assignment
Use correct role mapping from database configuration.
ä¿®å¤ç¨æ·è§è²åé
é误çbugï¼ä½¿ç¨æ£ç¡®çæ°æ®åºé
ç½®æ å°ã
Log: ä¿®å¤è§è²æ å°bug
Influence: ä¿®å¤åç¨æ·è§è²åé
é»è¾æ£ç¡®ï¼é¿å
æéé误ã
- User confirms and commit
Tips
- Always explain what you’re about to do before executing git commands
- If user provides feedback on the draft, show the complete revised message again for confirmation
- The Log field should be the most concise Chinese summary
- Influence should clearly state the impact on the system/users
- When in doubt, ask user for clarification rather than guessing