| name | git-workflow |
| description | Git工作流技能 - 提交规范、分支策略、冲突解决、提交验证。当你涉及git commit、git push、分支操作、合并、提交信息编写、代码提交时必须使用此技能。即使用户只是说"提交一下"或"git",也应触发。 |
Git工作流技能 (Git Workflow Skill)
快速规则(日常开发时自动加载,只需读到这里)
[Git核心清单] ① commit前必须git diff --staged检查暂存内容,❌盲目git add . ② message格式<type>(<scope>): <description>,type=feat/fix/refactor/test/docs/chore ③ 一个逻辑变更=一个commit,禁止把不相关改动混在一起
[提交三禁] ❌未检查暂存内容就commit(可能提交调试代码/敏感信息/无关文件) ❌force push到共享分支(覆盖他人工作无法恢复) ❌commit message写"fix"/"update"等无意义描述(无法追溯变更原因)
[验证铁律] push前必须确认:分支正确+编译通过+暂存内容正确。commit后用git log -1 --stat验证提交内容
以下为完整Git工作流审查流程,当用户请求/git-review或需要深度Git操作时加载:
完整审查流程
Phase 1: 提交前检查
-
暂存内容审查:
- 执行
git diff --staged查看所有将要提交的变更
- 确认无调试代码(console.log/print/debugger/TODO临时注释)
- 确认无敏感信息(密钥/密码/token/内网地址)
- 确认无无关文件(.DS_Store/node_modules/build产物/IDE配置)
-
文件范围检查:
- 确认所有变更文件都属于本次逻辑变更
- 如果有不相关改动,拆分为多次commit
- 新文件确认已被git track(
git status检查Untracked)
Phase 2: Commit Message规范
-
Message格式(Conventional Commits):
<type>(<scope>): <description>
[可选] <body>
[可选] <footer>
-
Type定义:
| type | 用途 | 示例 |
|---|
| feat | 新功能 | feat(auth): 添加OAuth2登录 |
| fix | Bug修复 | fix(parser): 修复空输入崩溃 |
| refactor | 重构(不改功能不修bug) | refactor(utils): 提取公共日期格式化 |
| test | 测试相关 | test(auth): 添加登录失败测试用例 |
| docs | 文档 | docs(readme): 更新安装步骤 |
| chore | 构建/工具/依赖 | chore(deps): 升级Swift Crypto到3.0 |
| style | 格式调整(不改逻辑) | style: 统一缩进为4空格 |
| perf | 性能优化 | perf(list): 大列表改用虚拟滚动 |
-
Description规则:
- 用祈使句("添加"而非"添加了")
- 首字母小写(英文时),不超过50字符
- 说做了什么,不说"修改了xxx文件"
- 有关联Issue时在footer加
Closes #123
Phase 3: 分支策略
-
分支命名:
- 功能分支:
feature/<描述> 或 feat/<描述>
- 修复分支:
fix/<描述> 或 hotfix/<描述>
- 实验分支:
experiment/<描述>
- 发布分支:
release/<版本号>
-
分支操作安全规则:
- push前确认当前分支:
git branch --show-current
- merge前确认目标分支是最新的:
git fetch origin && git log --oneline HEAD..origin/main -5
- ❌ 禁止force push到main/master/develop等共享分支(覆盖他人提交,无法恢复)
- ❌ 禁止直接在main上开发(绕过Code Review)
- 合并冲突必须逐文件解决,❌禁止
git checkout --theirs .全盘接受(全盘接受=丢弃自己所有改动,可能静默丢失重要代码且无法察觉)
Phase 4: 提交验证
-
提交后验证(每次commit后必须执行):
git log -1 --stat:确认提交内容和message正确
git diff HEAD~1 --name-only:确认变更文件列表符合预期
- 如果提交有误:
git commit --amend修正(仅限未push)
-
Push前验证:
git branch --show-current:确认分支正确
git log origin/<branch>..HEAD --oneline:查看将要push的commit列表
- 确认编译/测试通过(至少能编译)
- push后检查:
git log --oneline -3确认远程已同步
Phase 5: 常见问题处理
-
提交失败处理:
git commit返回错误 → 检查pre-commit hook输出
git push被拒绝 → 先git pull --rebase再push
- push后发现问题 →
git revert HEAD创建反向提交(❌禁止force push)
-
工作区管理:
- 临时切换分支前:
git stash push -m "描述"
- 切换回来后:
git stash pop
- 查看stash列表:
git stash list
Phase 6: 输出报告
## Git操作报告
### 提交摘要
| Commit | Message | 变更文件数 | 插入 | 删除 |
### 分支状态
- 当前分支:
- 与远程差异:ahead/behind
### 检查结果
| 检查项 | 状态 | 备注 |
| 暂存内容无调试代码 | ✅/❌ | |
| 暂存内容无敏感信息 | ✅/❌ | |
| Message格式正确 | ✅/❌ | |
| 编译通过 | ✅/❌ | |
| 分支正确 | ✅/❌ | |
Git操作强制规则
执行git命令前必须确认
- 当前所在分支(
git branch --show-current)
- 工作区状态(
git status)
- 暂存区内容(
git diff --staged,如果要commit的话)
强制规则
- ❌ 禁止
git add .后不检查暂存内容(可能提交.env/密钥/build产物/调试代码)
- ❌ 禁止commit message写"fix"/"update"/"change"等无意义描述(三个月后无人能看懂这次改了什么)
- ❌ 禁止force push到共享分支(覆盖他人提交,且无法恢复)
- ❌ 禁止跳过编译/测试直接push(破坏CI/CD流水线,阻塞其他人)
- ❌ 禁止一个commit包含不相关的多个改动(无法单独revert/cherry-pick,回滚时牵连无辜代码)
- ✅ 每次commit后必须
git log -1 --stat验证
- ✅ push前必须确认分支正确+检查将要push的commit列表
- ✅ 合并冲突必须逐文件理解后解决,不盲目accept
高级Git操作
交互式Rebase(整理提交历史)
git rebase -i HEAD~3
Cherry-pick(选择性合并)
git cherry-pick <commit-hash>
git cherry-pick <hash1> <hash2> <hash3>
git cherry-pick <start-hash>..<end-hash>
git cherry-pick --no-commit <hash>
git cherry-pick --continue
git cherry-pick --abort
Git Bisect(二分查找Bug引入点)
git bisect start
git bisect bad
git bisect good <known-good-hash>
git bisect good
git bisect bad
git bisect run go test ./...
git bisect reset
Pre-commit Hooks
set -euo pipefail
if git diff --cached | grep -iE '(password|secret|api_key|token)\s*[:=]' | grep -v 'test'; then
echo "❌ 检测到可能的敏感信息,请检查暂存内容"
exit 1
fi
if git diff --cached | grep -E '(console\.log|fmt\.Print|debugger|TODO:.*HACK)'; then
echo "⚠️ 检测到调试代码,确认是否需要提交"
fi
if ls *.go &>/dev/null; then
go vet ./... || { echo "❌ go vet 失败"; exit 1; }
fi
.gitignore管理
.DS_Store
*.log
node_modules/
dist/
build/
.env
.env.local
*.key
*.pem
__pycache__/
.idea/
.vscode/settings.json
git rm --cached .env
git rm --cached -r node_modules/
常用Git命令速查
git log --oneline -20
git log --graph --oneline --all
git log --author="name" --since="2025-01-01"
git blame file.go
git diff HEAD~3..HEAD -- path/to/file
git show <hash>:path/to/file
git checkout -- file.go
git restore --staged file.go
git reset --soft HEAD~1
git reset --hard HEAD~1
git revert <hash>
git clean -fd
git gc --prune=now
git remote prune origin
约束
- 所有git操作必须在用户工作区的正确目录下执行
- commit message必须反映实际变更内容,不得泛泛描述
- 涉及多人协作的分支操作必须格外谨慎
- 不确定操作是否安全时,先
git stash保存当前工作再操作