---
name: commit-before-deploy
description: 部署 Git 项目前先验证、提交并推送本次发布代码，确认远端提交后才构建和发布。适用于 DEV、UAT、生产等代码部署任务；只编写技能、检查或制定计划不触发发布。
---

# 部署前提交与推送

用户要求部署当前代码时，将本次发布所需改动的提交和推送视为部署前置步骤，复用已有授权，不重复确认。用户当次明确要求只检查、只计划或禁止推送时遵从其限制，并说明发布前置条件尚未满足。本技能不扩大目标环境、项目或发布范围的授权，也不授权创建技能时立即发布。

## 确定发布提交

1. 检查仓库指令、当前分支、上游、远端状态，以及暂存、未暂存和相关未跟踪文件。非 Git 项目、缺少远端或发布分支不明确时，说明缺少的信息并暂停部署，不自行初始化仓库或选择目标。
2. 明确本次发布范围并完成项目要求的验证。复用已通过且对应源码未变的验证。按 [git-topic-commit-push](../git-topic-commit-push/SKILL.md) 处理主题划分、暂存保护和中文 Conventional Commit；该技能不可用时遵循同样原则：只提交发布相关内容，检查完整暂存差异，保留无关修改，不使用全量暂存或重置清理工作区。
3. 核对远端更新。出现分歧时先检查并按项目规则处理，无法安全解决则停止；不自动强推、改写历史或切换发布目标。
4. 有相关改动则提交并推送到确认的上游。无新改动但提交未推送时只推送；目标提交已存在于远端时直接继续，不创建空提交。提交或推送失败时停止，不上传产物或切换线上版本。
5. 用远端查询确认发布提交存在于目标分支：通常远端分支 SHA 应等于发布提交；若远端已有后续提交，获取并核实发布提交是该分支祖先，同时确认仍应发布该版本。不能仅凭本地 upstream 引用或推送命令成功作判断。记录远端、分支和完整提交 SHA。

## 从已推送源码发布

- 只有前置检查全部通过，才按项目部署流程构建、上传、切换和验证。构建源码必须对应已推送的发布提交。
- 无关本地修改可以保留，但不得进入产物。必要时在隔离检出中构建；部署专用、被忽略的环境配置按项目流程提供，不提交密钥。记录构建所用的提交与环境。
- 已有产物须能追溯到该提交和目标环境，否则重新构建。构建前后检查受版本控制的输入和相关未跟踪文件；构建后源码变化或构建过程改写跟踪文件时，停止发布，核实范围，重新完成验证、提交和推送后再构建。
- 回滚既有版本复用它的产物与提交记录，不制造源码提交。不能追溯提交时报告缺口并明确回滚依据，不伪造记录；沿用项目紧急恢复规则。
- 每个失败步骤都是停止条件。报告已完成的提交、推送或构建，以及具体阻塞原因；不得在失败后继续上传或切换。

## 交付

报告提交哈希、主题、远端分支确认结果、发布版本与验证结果。区分代码已提交、已推送、已构建和已部署；未完成步骤如实说明。只要求创建或修改本技能时，不自动提交、推送或部署技能文件。
