用途
git-pushing 是一个 Git 推送工作流技能,用于安全地暂存、提交并推送预期的变更,并使用约定式提交消息。它面向普通的非发布推送场景,帮助用户在明确要求推送时完成从暂存到推送的完整流程。
主要能力
- 仅暂存预期的变更,创建约定式提交,并推送到远程分支。
- 在暂存前检查
git status --short --branch,确认目标文件,并在可能发生并发推送时获取上游分支,避免纳入无关的脏文件。 - 读取仓库策略以选择目标分支。若 main 或 master 受保护,或仓库定义了类似
merge:batch的维护者命令,则创建或使用主题分支,并通过所需的拉取请求检查完成。用户要求“推送到 main”仅描述期望的最终状态,不授权绕过服务端保护;在受保护分支被拒绝后不会反复重试直接推送。 - 辅助脚本要求活动索引为空且提交消息符合约定式格式,才会进行暂存。它会锁定活动索引,在隔离的临时索引中构建并验证提交,拒绝不带路径的
--,并且仅当分支父提交未变化时才原子更新分支。 - 按
branch.<name>.pushRemote、remote.pushDefault、分支配置的上游顺序选择推送目标。对于没有这些设置的新分支,要求存在 origin 并建立origin/<branch>。在暂存前拒绝分离头指针(detached HEAD)和无效的远程配置。
使用方式
在安全门检查通过后使用辅助脚本。需要解析包含此 SKILL.md 的已安装目录,并用其绝对路径替换下方的 <skill-directory>;不要假设当前工作目录就是目录仓库。
不带路径时,辅助脚本会暂存所有当前变更,因此仅当所有脏文件都属于所请求的提交时才使用该形式:
bash "<skill-directory>/scripts/smart_commit.sh"
使用自定义消息:
bash "<skill-directory>/scripts/smart_commit.sh" "feat: add feature"
仅暂存指定文件时,在 -- 之后传入它们:
bash "<skill-directory>/scripts/smart_commit.sh" "fix: scope change" -- path/to/file
辅助脚本负责隔离暂存、创建提交和推送;它不替代验证、发布工具,或高级上游分支所需的重基(rebase)。
适用场景
当用户明确要求推送变更(如“push this”“commit and push”)、提到将工作保存到远程(如“save to github”“push to remote”)、完成某个功能并希望分享,或说出“let's push this up”“commit these changes”等语句时,该技能会自动激活。
限制
- 辅助脚本目前要求 Git 使用 files ref 后端;在创建提交前会拒绝 reftable 仓库,因为其引用无法使用文件系统锁协议。
- 仅当任务明确匹配上述范围时才使用此技能。
- 不要将输出视为环境特定验证、测试或专家审查的替代品。
- 如果缺少必需的输入、权限、安全边界或成功标准,应停止并请求澄清。
- 不适用于维护者合并批次、规范同步、版本化仓库发布、标签发布,或具有明确
merge:batch、release:prepare、release:publish工作流的仓库;这些场景应使用该仓库的维护者/发布流程,由其负责拉取请求证据、受保护分支检查、生成文件、标签和发布验证。