auto-git-finish-push
这篇文档解决什么问题
auto-git-finish-push 是一个给 AI 编程助手 / AI 编辑器使用的 Git 收尾 skill。
它适合在一次代码或文档任务结束后,自动完成这些收尾动作:
- 检查当前 Git 状态
- 只暂存本次任务产生的变更
- 根据 staged diff 生成 commit message
- 创建 commit
- 执行普通
git push
它的核心原则很明确:
不确定就停止。
只要分支、文件、变更归属、冲突状态或远端状态不安全,它就不会提交,也不会推送。
资料来源:
先说结论
- Codex 可以把它当作原生 skill 安装。
- 其他支持 skills、rules、instructions 或 project rules 的 AI 编辑器,也可以复用同一份
SKILL.md。 - 它不是
git add . && git commit && git push的脚本。 - 它会先过安全门,过不了就停止并报告原因。
- 安装时,
skills.sh使用仓库根地址,不需要追加tree/main/auto-git-finish-push。
安装方式
通过 skills.sh 安装
以 Codex 为例:
sh
npx skills add https://github.com/5046312/auto-git-finish-push -a codex -g -y如果使用其他 AI 编辑器,把 -a codex 换成 skills.sh 中对应的 agent 名称即可。仓库地址仍然使用根地址。
通过 Codex skill-installer 安装
如果当前 Codex 环境支持 skill-installer,可以直接说:
text
Use $skill-installer to install https://github.com/5046312/auto-git-finish-push安装后重启对应 AI 编辑器或会话,让新 skill / 规则生效。
手动安装
不使用 installer 时,可以手动复制 skill 目录。
Codex 示例:
sh
git clone https://github.com/5046312/auto-git-finish-push.git
mkdir -p ~/.codex/skills
cp -R auto-git-finish-push/auto-git-finish-push ~/.codex/skills/auto-git-finish-push其他 AI 编辑器可以把 auto-git-finish-push/SKILL.md 放到对应的全局规则、项目规则或自定义 skill 目录中。如果工具不能直接安装 skill,也可以在项目规则里引用这份文件。
复制完成后,同样需要重启对应 AI 编辑器或会话。
目录结构
可安装的 skill 位于仓库里的 auto-git-finish-push/ 目录:
text
auto-git-finish-push/
├── SKILL.md
└── agents/
└── openai.yaml仓库根目录的 README.md 和 README.zh-CN.md 用来给 GitHub 用户阅读,不是 skill 运行时必须文件。
openai.yaml 提供 OpenAI / Codex 侧的展示信息:
| 字段 | 内容 |
|---|---|
display_name | Auto Git Finish Push |
short_description | Safely commit and push task-owned Git changes |
default_prompt | Use $auto-git-finish-push to safely commit and push the current task changes. |
使用方式
显式触发
任务结束时,可以直接让 Codex 使用这个 skill:
text
Use $auto-git-finish-push to commit and push this task.如果 AI 编辑器不支持 $skill-name 触发方式,可以让它直接读取并遵守仓库里的 SKILL.md:
text
Before the final response, follow auto-git-finish-push/SKILL.md to safely stage, commit, and push only the current task changes.项目级自动触发
如果希望某个项目每次代码或文档任务结束后都自动执行,可以把下面规则加入项目规则文件。
Codex 放到 AGENTS.md;其他 AI 编辑器放到对应的 rules、instructions 或 project rules 文件:
text
At the end of every coding or documentation task, before the final response, use $auto-git-finish-push to safely stage, commit, and push task-owned changes.项目级触发更适合这个 skill,因为它需要在任务开始前记录 Git baseline,用来区分用户原本的脏文件和本次任务产生的变更。
它实际会做什么
1. 任务开始前记录 baseline
当这个 skill 对当前任务生效时,先记录起点状态:
sh
git status --short
git branch --show-current
git rev-parse --show-toplevel这个 baseline 用来避免把任务开始前已经存在的用户修改一起提交。
2. 收尾时检查当前状态
准备提交前先看当前仓库状态:
sh
git status --short
git diff --stat
git diff --name-status如果没有改动,直接跳过 Git 操作,并报告没有检测到变更。
3. 暂存任务拥有的变更
工作区起点干净时,可以暂存本轮任务改动:
sh
git add -A如果任务开始前工作区已经不干净,就必须改用路径级暂存:
sh
git add -- <paths>无法确认哪些文件属于本次任务时,停止。
4. 用 staged diff 生成 commit message
提交信息必须来自 staged diff,而不是凭记忆写:
sh
git diff --cached --stat
git diff --cached --name-status
git diff --cached推荐格式:
text
type(scope): short imperative summary
- concrete change
- concrete change
Verification:
- command run, or "not run"常用 type:
| 类型 | 含义 |
|---|---|
feat | 用户可感知的新功能 |
fix | 问题修复 |
docs | 文档 |
refactor | 不改变行为的重构 |
test | 测试 |
chore | 工具、配置、维护类变更 |
5. 提交并普通推送
提交使用 message 文件:
sh
git commit -F /tmp/auto-git-finish-push-message.txt推送只使用普通 push:
sh
git push如果当前分支没有 upstream,只有用户或项目规则明确允许时,才使用:
sh
git push -u origin HEAD否则停止,并报告用户可以手动执行的命令。
安全门
提交前必须检查:
| 安全门 | 不通过时 |
|---|---|
| 当前目录必须在 Git 仓库内 | 停止 |
| 不能处于 merge、rebase、cherry-pick、bisect 中间状态 | 停止 |
当前分支不能是 main、master、production | 停止 |
当前分支不能匹配 release/*、hotfix/* | 停止 |
改动不能包含 .env、.env.*、*.pem、*.key、*.p12 | 停止 |
改动不能包含 id_rsa、id_ed25519、.DS_Store | 停止 |
| 起点脏工作区必须能区分任务归属 | 停止 |
| push 不能需要 force | 停止 |
明确禁止:
sh
git push --force
git push --force-with-lease停止时怎么报告
只要被安全门拦住,就不能 commit,也不能 push。
需要报告:
- 阻塞原因
- 涉及文件
- 没有执行 commit / push
如果成功 push,需要报告:
- commit hash
- 分支
- remote 目标
- commit message
- 执行过或没执行的验证命令
- 有意排除的文件
适合谁
适合:
- 经常让 AI 编程助手完成小型代码或文档任务
- 不想每次手动整理
git add/commit/push - 希望 commit message 来自真实 diff
- 不希望 AI 把任务外脏文件一起提交
- 不希望 AI 强推或误推保护分支
不适合:
- 想自动解决 Git 冲突
- 想自动合并主分支
- 想自动改写历史
- 想自动发布 release
- 想绕过分支保护
和简单脚本的区别
简单脚本通常是:
sh
git add .
git commit -m "update"
git pushauto-git-finish-push 的重点不是“更快把东西推上去”,而是“能安全推才推”。
它多做了这些事:
- 记录任务起点状态
- 检查分支、冲突和远端状态
- 过滤敏感文件和本地文件
- 只暂存任务拥有的文件
- 根据 staged diff 写 commit message
- 不做 force push
- 不安全时失败并说明原因
推荐用法
个人临时任务可以显式调用:
text
Use $auto-git-finish-push to commit and push this task.长期项目更适合写进项目规则,让它从任务开始就记录 baseline。
这个 skill 的价值不是“永远自动提交推送”,而是“安全门通过就自动,过不了就停下并说清楚”。