Skip to content

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.mdREADME.zh-CN.md 用来给 GitHub 用户阅读,不是 skill 运行时必须文件。

openai.yaml 提供 OpenAI / Codex 侧的展示信息:

字段内容
display_nameAuto Git Finish Push
short_descriptionSafely commit and push task-owned Git changes
default_promptUse $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 中间状态停止
当前分支不能是 mainmasterproduction停止
当前分支不能匹配 release/*hotfix/*停止
改动不能包含 .env.env.**.pem*.key*.p12停止
改动不能包含 id_rsaid_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 push

auto-git-finish-push 的重点不是“更快把东西推上去”,而是“能安全推才推”。

它多做了这些事:

  • 记录任务起点状态
  • 检查分支、冲突和远端状态
  • 过滤敏感文件和本地文件
  • 只暂存任务拥有的文件
  • 根据 staged diff 写 commit message
  • 不做 force push
  • 不安全时失败并说明原因

推荐用法

个人临时任务可以显式调用:

text
Use $auto-git-finish-push to commit and push this task.

长期项目更适合写进项目规则,让它从任务开始就记录 baseline。

这个 skill 的价值不是“永远自动提交推送”,而是“安全门通过就自动,过不了就停下并说清楚”。

基于 VitePress 的个人知识库骨架