git-commit-workflow
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
More from re2zero/deepin-skills
qt-compatibility-build
Use when maintaining Debian packages that need Qt5/Qt6 dual support, CMakeLists.txt has hard-coded Qt5/Qt6 or DTK5/DTK6 versions, or projects need dynamic library linking based on detected Qt version for deepin V25/V20 compatibility
61qt-unittest-make
Use when users request generating unit tests for Qt modules or classes, completing test cases, or creating test files. Supports module batch generation and incremental completion.
56qt-translation-assistant
Use when user requests translating Qt project localization files (TS files), automating translation workflows, or setting up multilingual support for Qt applications. This skill uses parallel processing with ThreadPoolExecutor to translate TS (Translation Source) files efficiently.
36qt-unittest-build
为 Qt 项目生成单元测试框架。包含完整依赖、子 Agent 和固定脚本,一键生成 autotests 测试框架。
22github-review-report
Use when generating Chinese format Excel reports from GitHub code reviews with AI analysis and filtering by date, branch, or reviewers
18create-release-tags
Use when releasing new versions for Debian projects with optional linglong.yaml support, updating debian/changelog, incrementing patch versions automatically, and creating git commits
17