| name | auto-git-commit |
| description | 在每次任务完成后自动执行 git add + git commit 提交本次改动。任何代码/文档/配置修改完成、用户表示满意、或显式要求提交时调用。 |
Auto Git Commit
本 skill 用于在完成一次任务(代码、文档、配置变更)后,自动执行 git 提交,确保改动不会因为忘记提交而丢失。
何时调用
必须在以下场景被触发:
- 完成一次代码 / 文档 / 配置修改后
- 用户说"提交一下""commit""保存到 git""收尾"等
- 任务流程结束、即将回复总结时
- 任何使用了
Write / SearchReplace / DeleteFile 的会话回合结束时
不要触发:
- 仅做了只读操作(查看、搜索、运行测试)
- 用户明确说"不要提交""先不 commit"
- 工作区无变更(
git status 为空)
执行流程
每次按以下步骤执行,所有命令通过 RunCommand 工具运行,不能跳过校验:
1. 检查工作区状态
并行执行:
git status
git diff
git log --oneline -5
要点:
git status 不要使用 -uall
- 若没有任何改动,直接跳过提交并告知用户
git log 用来对齐仓库的 commit message 风格
2. 安全校验
在提交前确认:
- ❌ 不提交敏感文件:
.env、credentials.*、*.key、secrets/*
- ❌ 不提交大型二进制:
*.zip、构建产物 dist/、out/、node_modules/
- ✅ 仅添加与本次任务相关的具体文件
- ✅ 优先使用
git add <具体文件>,避免 git add -A / git add .
发现敏感文件时:先警告用户,等待确认后再继续。
3. 撰写 commit message
格式遵循仓库已有风格(通过 git log --oneline 观察)。若仓库使用 Conventional Commits,按如下规范:
<type>(<scope>): <subject>
<body 可选:解释为什么这么改>
常用 type:
feat 新功能
fix 修复 bug
docs 文档
refactor 重构
test 测试
chore 杂项 / 构建 / 配置
要求:
- subject 50 字符内,**强调"为什么"**而非"做了什么"
- 中文仓库使用中文,英文仓库使用英文
- 单条 PR 聚焦一个主题
4. 执行提交
使用 HEREDOC 方式确保多行 message 正确:
git add <files>
git commit -m "$(cat <<'EOF'
feat(scope): 简洁描述本次改动的目的
可选 body:补充背景或原因。
EOF
)"
5. 验证结果
提交后执行:
git status
git log --oneline -1
向用户汇报:commit hash、message、涉及文件数量。
重要约束
- ❌ 不要自动
git push,除非用户明确要求
- ❌ 不要修改
git config
- ❌ 不要执行
git reset --hard / git clean -f / git checkout . 等破坏性命令
- ❌ 不要强制推送到
main / master / develop
- ❌ 不要使用
-i 交互式 flag(rebase -i、add -i)
- ❌ 不要对空改动创建空 commit
- ✅ 若 pre-commit hook 失败,把错误原文反馈给用户,不要绕过
调用示例
场景 A:完成功能修改后
用户:帮我修一下登录 bug
助手:[修改代码] ...
助手:[invoke auto-git-commit]
→ git status / diff / log
→ git add src/auth/login.ts src/auth/login.test.ts
→ git commit -m "fix(auth): 修复重复触发导致的会话丢失"
→ 反馈 commit hash
场景 B:仅做了浏览/搜索
用户:这个项目入口在哪?
助手:[Read / Grep] ...
助手:[不调用 commit skill,无改动]
场景 C:用户显式要求提交
用户:commit 一下
助手:[invoke auto-git-commit] 立刻执行
与 RunCommand 协作要点
- 提交命令均为
short_running_process,使用 blocking: true
- 串行依赖(add → commit → status)放在同一个 RunCommand 调用里用
&& 串联,避免占用多个终端
- 复用现有空闲终端,不要为每条 git 命令开新终端
- 若工作目录非仓库根,使用
cwd 参数显式指定