push-remote
把本地提交安全地推送到远程仓库。当用户要求推送代码、推到远程、push 一下、把改动推上去、同步到 origin、提交后推一下,或推送失败(non-fast-forward / rejected / 权限或认证失败)需要恢复步骤时使用。本 skill 负责推送这个动作本身:推送前核对分支与 upstream、确认远程范围与将要上传的提交、识别强推风险并优先用 --force-with-lease
SKILL.md.claude/skills/push-remote/SKILL.md
GitHub推送到远程
把已经完成的本地提交推到远程,并在推之前把"推错地方、推错内容、覆盖别人"这三类不可逆后果挡住。推送会改变远程状态且不易悄悄撤回,因此先核对、再确认、后执行、最后验证。
先确定任务边界
- 用户明确要求推送时才执行
git push。用户只说"提交"时,完成提交即可,不顺手推送。 - 只在当前分支推送到它已有的 upstream。不新建分支、不改
remote配置、不改写历史,除非用户明确要求。 --force/--force-with-lease/ 删除远程分支 / 推送 tags 都属于高风险动作,必须单独向用户确认,不能从"帮我推一下"里推断授权。- 推送目标仓库可能是团队共享仓库。即使有权限,也要先把"将要上传哪些提交"讲清楚再推。
持久推送授权
逐次确认常规推送会拖慢节奏,因此本仓库支持把授权固化为配置,而不是每轮重问一遍:
- 读本机被 gitignore 的
local-config.json(仓库内提交的local-config.template.json给出字段说明)。 pushAuthorized: true—— 常规推送无需逐次确认,直接执行并在报告中说明依据。forcePushAuthorized: true—— 仅这一项才放行--force-with-lease。它与pushAuthorized互不蕴含:拿到"直接推送"的授权不等于拿到强推授权,也不等于可以推送 tags 或删除远程分支。protectedBranches—— 所列分支上即使有强推授权也不允许强推。- 没有配置文件、配置里没有该项、或授权已过合理期限时,回到逐次确认。
授权放宽的是"问不问",不是"查不查"。 有了持久授权,推送前的现场核对(分支、upstream、待推送提交、敏感文件)与推送后的远程 ref 验证一步都不能省——那两步是防事故的,不是防打扰的。
推送路径
- 读现场。 用
git status -sb拿到当前分支、upstream 与领先/落后提交数;用git remote -v确认远程地址与协议;用git log --oneline @{upstream}..HEAD列出这次真正会推上去的提交。如果工作区有未提交改动,说明它们不会被推送,不要替用户顺手提交。 - 判定推送形态。 按实际情况归入一种,并向用户说明:
- 快进推送(本地领先、远程未变):常规情况,风险最低。
- 远程有新提交(本地落后或分叉):先停。默认选择
git pull --rebase(或按仓库既有约定 merge)后再推,不要用强推把别人的提交抹掉。 - 无 upstream 的新分支:需要
-u origin <branch>建立跟踪,且大概率要推送新分支——属于需确认的动作。 - 强推场景(消息改写、rebase 后、回滚提交):只允许
--force-with-lease,并在推送前确认远程 ref 未被他人更新。
- 过安全闸。 推送前逐项核对,任何一项不确定就停下问用户:
- 目标 remote 与分支是否就是用户要推的那个(尤其存在多个 remote 或 fork 时)。
- 将要上传的提交里有没有疑似密钥、令牌、
.env、local-config.json等敏感文件。仓库若有audit-remote-secret-leaks之类的审计流程,提醒用户先跑;本 skill 不代替泄露审计。 - 是否有误提交的大文件、构建产物或本地配置。
- 若推送 tags 或删除分支,单独确认范围。
- 执行并验证。 推送后不要只看命令退出码:用
git status -sb确认领先提交归零(或远程 ref 已更新到预期 SHA),用git log --oneline -1 origin/<branch>核对远程顶端就是本地顶端。如有 CI 或 hook 输出,说明其状态;触发失败或被拒要如实报告。 - 失败就给恢复路径。 被
non-fast-forward拒绝、认证失败、hook 拒绝、protected branch拦截时,按下文 references 给出具体可执行的恢复步骤,说明每一步会改变什么,并明确哪些需要用户授权。不要用强推"解决"一个本该先合并的冲突。
交付内容
用简洁中文报告:推送目标(remote/分支)→ 本次上传的提交清单 → 执行的命令 → 推送后验证结果 → 未完成或需授权的事项。区分"已推送到远程""仅本地提交""推送被拒未生效"三种状态,不要用含糊表述掩盖没推成功的事实。
与相邻 skill 的边界
- 生成提交信息、创建提交:
/commit命令。 - 推送前的敏感信息泄露审计:
audit-remote-secret-leaks。本 skill 只提醒,不做审计结论。 - 发布评审、版本冻结、回滚预案:
release-readiness。 - 故障根因定位:
systematic-debugging。