git-commit
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSkill: Git Commit con Conventional Commits
Skill:基于Conventional Commits的Git Commit
Preparar y ejecutar commits estandarizados según Conventional Commits, inferidos del diff real del repositorio.
Alcance: captura un único cambio lógico con mensaje semántico. No hace push, no toca configuración global de git, no aplica operaciones destructivas. Preguntar lo que no esté claro — no inventar tipo, scope ni descripción.
Formato canónico:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]根据Conventional Commits规范准备并执行标准化提交,提交信息从仓库的实际diff中推断得出。
适用范围: 捕获单个逻辑变更并生成语义化消息。不执行push操作,不修改git全局配置,不执行破坏性操作。对不明确的内容进行询问——不要自行编造类型、作用域或描述。
标准格式:
<type>[可选 scope]: <description>
[可选 body]
[可选 footer(s)]Cómo preguntar al usuario
如何向用户提问
Usar la herramienta de preguntas estructuradas del cliente (opciones tappables). Reglas:
- Una pregunta por turno; máximo tres en un mismo bloque.
- Opciones cortas y mutuamente excluyentes (2–4); entrada libre solo si no hay forma de enumerar opciones.
- No repreguntar lo que ya está en el contexto, , el diff o la propuesta ya mostrada.
.agents/MEMORY.md - Una sola tanda al inicio para resolver ambigüedades; excepciones deliberadas por turno: propuesta de commit, commit en rama protegida, archivo sensible detectado.
- Fallback: prosa con opciones enumeradas (1, 2, 3…) si el cliente no expone la herramienta.
使用客户端的结构化提问工具(可点击选项)。规则:
- 每次提问一个问题;同一区块最多三个问题。
- 选项简短且互斥(2–4个);仅当无法枚举选项时才允许自由输入。
- 不重复询问上下文、、diff或已展示提案中已有的内容。
.agents/MEMORY.md - 仅在开始时进行一轮提问以解决歧义;例外情况:提交提案、向受保护分支提交、检测到敏感文件时可逐次询问。
- 备选方案:如果客户端未提供结构化工具,则使用带编号选项(1、2、3…)的普通文本提问。
Resolución de idioma
语言处理
- en
preferred language(claves legacy.agents/MEMORY.md,language:,idioma:como fallback).Project language: - Idioma del turno del usuario.
- Preguntar y persistir en .
.agents/MEMORY.md
Afecta a la parte en lenguaje natural (descripción, body, footers). Tipo y scope permanecen en inglés salvo acuerdo explícito del equipo.
- 优先使用中的
.agents/MEMORY.md(兼容旧版键值preferred language、language:、idioma:作为备选)。Project language: - 使用用户当前对话的语言。
- 若未确定则询问用户并将结果存入。
.agents/MEMORY.md
语言设置影响自然语言部分(描述、body、footers)。类型和作用域默认保持英文,除非团队有明确约定。
Selección de flujo
流程选择
| Condición | Flujo |
|---|---|
| Sin cambios en el repo | Informar al usuario y no commitear |
| Diff cubre un único tema lógico | Flujo: Commit estándar |
| Diff mezcla temas (docs + feature, fix + refactor, módulos sin relación) | Flujo: Múltiples cambios lógicos |
| Flujo: Recuperación tras fallo de hook |
| 条件 | 流程 |
|---|---|
| 仓库无变更 | 告知用户并不执行提交 |
| Diff仅包含单个逻辑主题 | 流程:标准提交 |
| Diff混合多个主题(文档+功能、修复+重构、无关联模块) | 流程:多逻辑变更 |
| 流程:Hook失败恢复 |
Convenciones del mensaje
提交消息规范
- Tipo y scope: palabras clave en inglés salvo convención explícita del equipo.
- Descripción: verbo imperativo presente, máximo 72 caracteres, sin punto final, sin mayúscula inicial.
- Breaking change: tras tipo/scope (
!) o footerfeat!:.BREAKING CHANGE: <detalle> - Referencias a issues: footer o
Closes #123cuando el usuario aporte el número.Refs #456
- 类型和作用域: 默认使用英文关键词,除非团队有明确约定。
- 描述: 使用现在时祈使动词,最多72个字符,无句点,首字母不大写。
- 破坏性变更: 在类型/作用域后添加(如
!)或使用footerfeat!:。BREAKING CHANGE: <详情> - Issue引用: 当用户提供编号时,使用footer 或
Closes #123。Refs #456
Tipos de commit
提交类型
| Tipo | Propósito |
|---|---|
| Nueva funcionalidad |
| Corrección de bug |
| Solo documentación |
| Formato/estilo (sin lógica) |
| Refactorización (sin feature/fix) |
| Mejora de rendimiento |
| Añadir o actualizar tests |
| Sistema de build / dependencias |
| Cambios en CI / configuración |
| Mantenimiento / miscelánea |
| Revertir commit |
| 类型 | 用途 |
|---|---|
| 新功能 |
| Bug修复 |
| 仅文档变更 |
| 格式/样式调整(无逻辑变更) |
| 代码重构(无新功能/修复) |
| 性能优化 |
| 添加或更新测试 |
| 构建系统/依赖变更 |
| CI配置变更 |
| 日常维护/杂项 |
| 回滚提交 |
Inferencia desde el diff
从Diff中推断信息
Aplicar en orden; si nada encaja con confianza, preguntar al usuario.
按顺序执行;若无法确定则询问用户。
Tipo
类型推断
| Patrón observado | Tipo |
|---|---|
Solo | |
Solo | |
Solo archivos de CI ( | |
Solo archivos de build ( | |
| Solo cambios de formato/espaciado sin lógica modificada | |
Archivos nuevos bajo | |
| Modificación de lógica existente que corrige un comportamiento descrito como bug | |
| Reestructuración interna sin cambiar comportamiento observable | |
| Cambios cuyo único objetivo es ejecución más rápida o menor consumo | |
| Reversión de un commit anterior | |
| Configuración, scripts auxiliares, dependencias menores | |
| 观测模式 | 类型 |
|---|---|
仅修改 | |
仅修改 | |
仅修改CI文件( | |
仅修改构建文件( | |
| 仅修改格式/空格,无逻辑变更 | |
| |
| 修改现有逻辑以修复被描述为Bug的行为 | |
| 内部重构,不改变可观测行为 | |
| 仅以提升执行速度或降低资源消耗为目标的变更 | |
| 回滚之前的提交 | |
| 配置、辅助脚本、次要依赖变更 | |
Scope
作用域推断
- Todos los archivos bajo un único módulo () → scope = nombre del módulo.
src/auth/** - Todos bajo una feature o dominio identificable → scope = nombre de la feature.
- Cambio transversal a una capa (,
api,db,ui) → scope = nombre de la capa.config - Sin scope claro → omitirlo. No inventar genéricos (,
misc,update).code
- 所有文件属于同一模块(如)→ 作用域=模块名称。
src/auth/** - 所有文件属于可识别的功能或领域 → 作用域=功能名称。
- 变更涉及横向层面(、
api、db、ui)→ 作用域=层面名称。config - 无明确作用域 → 省略。不要编造通用名称(如、
misc、update)。code
Descripción
描述推断
Verbo imperativo presente (, , , , ). Indicar qué cambia, no cómo se implementó. Máximo 72 caracteres. Sin punto final. Sin mayúscula inicial.
addfixremovevalidateprevent使用现在时祈使动词(、、、、)。说明变更内容,而非实现方式。最多72个字符。无句点。首字母不大写。
addfixremovevalidatepreventDetección de secretos en el diff
Diff中的敏感信息检测
Ejecutar antes de aceptar el staging:
bash
git diff --staged | grep -nEi 'password[[:space:]]*=|api[_-]?key|secret[[:space:]]*=|token[[:space:]]*=|BEGIN (RSA |EC |OPENSSH |DSA )?PRIVATE KEY|aws_access_key_id|aws_secret_access_key|-----BEGIN CERTIFICATE-----'Si hay coincidencias, o si el staging incluye , , , , , : detener y reportar al usuario los archivos y líneas detectadas. No commitear hasta que el usuario los retire () o confirme explícitamente que es intencional.
.env**.pem*.keyid_rsa**.p12*.pfxgit restore --staged <ruta>在确认暂存前执行:
bash
git diff --staged | grep -nEi 'password[[:space:]]*=|api[_-]?key|secret[[:space:]]*=|token[[:space:]]*=|BEGIN (RSA |EC |OPENSSH |DSA )?PRIVATE KEY|aws_access_key_id|aws_secret_access_key|-----BEGIN CERTIFICATE-----'若检测到匹配内容,或暂存区包含、、、、、:立即停止并向用户报告检测到的文件和行号。在用户移除相关内容()或明确确认是有意操作前,不执行提交。
.env**.pem*.keyid_rsa**.p12*.pfxgit restore --staged <路径>Flujo: Commit estándar
流程:标准提交
- Inspeccionar estado y diff:
bash
git status --porcelain git diff --staged # si hay staging git diff # si no hay staging git rev-parse --abbrev-ref HEAD - Ajustar staging: añadir archivos faltantes del cambio (); retirar no relacionados (
git add <ruta>).git restore --staged <ruta> - Inferir tipo, scope y descripción desde el diff.
- Decidir body (solo si aporta contexto no obvio) y footer (,
BREAKING CHANGE).Closes #N - Ejecutar Validación antes de ejecutar. Si falla, detener.
- Mostrar Propuesta de commit y esperar confirmación.
- Ejecutar el commit:
bash
# Una línea git commit -m "<type>[scope]: <description>" # Multi-línea git commit -m "$(cat <<'EOF' <type>[scope]: <description> <optional body> <optional footer> EOF )" - Reportar SHA corto () y mensaje del commit creado.
git rev-parse --short HEAD
- 检查状态和diff:
bash
git status --porcelain git diff --staged # 若有暂存内容 git diff # 若无暂存内容 git rev-parse --abbrev-ref HEAD - 调整暂存区:添加变更中遗漏的文件();移除无关文件(
git add <路径>)。git restore --staged <路径> - 从diff中推断类型、作用域和描述。
- 决定是否添加body(仅当提供非显而易见的上下文时)和footer(、
BREAKING CHANGE)。Closes #N - 执行提交前验证。若验证失败则停止。
- 展示提交提案并等待用户确认。
- 执行提交:
bash
# 单行消息 git commit -m "<type>[scope]: <description>" # 多行消息 git commit -m "$(cat <<'EOF' <type>[scope]: <description> <optional body> <optional footer> EOF )" - 报告提交的短SHA()和提交消息。
git rev-parse --short HEAD
Flujo: Múltiples cambios lógicos
流程:多逻辑变更
- Agrupar archivos por afinidad desde el diff (área, tipo de cambio, intención).
- Proponer al usuario la lista ordenada de commits planeados: tipo/scope, archivos, descripción tentativa.
- Esperar confirmación o ajustes antes de tocar staging.
- Por cada grupo confirmado, en orden:
- (preserva el working tree) para vaciar staging.
git reset - del grupo.
git add <archivos> - Ejecutar Validación antes de ejecutar.
- Mostrar Propuesta de commit y esperar confirmación.
- y registrar el SHA.
git commit -m "..."
- Reportar la secuencia final de SHAs y mensajes en el orden ejecutado.
Flujo: Recuperación tras fallo de hook
流程:Hook失败恢复
- Leer el mensaje del hook; aplicar las correcciones en el working tree.
- Re-stagear los archivos corregidos: .
git add <archivos> - Crear un commit nuevo con el mismo mensaje acordado — no salvo petición explícita.
--amend - No usar salvo petición explícita.
--no-verify - Si el problema es del propio hook (config rota, no del código): informar al usuario y esperar instrucciones.
- 读取Hook错误消息;在工作区中应用修正。
- 重新暂存修正后的文件:。
git add <文件> - 使用之前约定的消息创建新提交——除非用户明确要求,否则不使用。
--amend - 除非用户明确要求,否则不使用。
--no-verify - 若问题源于Hook本身(配置错误,而非代码问题):告知用户并等待指示。
Propuesta de commit
提交提案
Mostrar antes de ejecutar y esperar confirmación mediante la herramienta de preguntas estructuradas:
git commitPropuesta:
tipo: <type>
scope: <scope o "(omitido)">
descripción: <description>
archivos:
- <archivo 1>
- <archivo 2>
body: <texto o "(ninguno)">
footer: <texto o "(ninguno)">Opciones: / / / / . Si el usuario ajusta, aplicar y volver a mostrar la propuesta.
ConfirmarAjustar tipoAjustar scopeAjustar descripciónCancelar在执行前展示提案,并通过结构化提问工具等待用户确认:
git commit提案:
类型: <type>
作用域: <scope 或 "(省略)">
描述: <description>
文件:
- <文件1>
- <文件2>
Body: <文本或 "(无)">
Footer: <文本或 "(无)">选项: / / / / 。若用户调整,应用修改后重新展示提案。
确认调整类型调整作用域调整描述取消Validación antes de ejecutar
提交前验证
- Sin secretos en staging (ejecutar Detección de secretos).
- Un solo cambio lógico por commit.
- Sin ,
--force,--hard,--no-verifysalvo petición explícita.--amend - Rama segura, o usuario confirmó commit directo en /
main/master/develop.release/*
Si hay conflicto:
⚠️ No es posible commitear todavía:
- <razón concreta>
- <archivo, línea o detalle>- 暂存区无敏感信息(执行敏感信息检测)。
- 每个提交仅包含单个逻辑变更。
- 除非用户明确要求,否则不使用、
--force、--hard、--no-verify。--amend - 分支安全,或用户已确认直接向/
main/master/develop提交。release/*
若存在冲突:
⚠️ 无法执行提交:
- <具体原因>
- <文件、行号或详情>Checklist antes de ejecutar git commit
git commit执行git commit
前检查清单
git commitInformación:
- y
git statusrevisados completosgit diff - Tipo, scope y descripción derivados del diff, no inventados
- Rama actual conocida
- Idioma de preferencia determinado
- Intención clara: un commit único vs. separación en varios
Validación:
- Detección de secretos ejecutada sin coincidencias
- Un solo cambio lógico por commit
- Sin ,
--force,--hard,--no-verifysalvo petición explícita--amend - Rama segura o usuario confirmó
Formato:
- Primera línea válida
<type>[scope]: <description> - Descripción: imperativo presente, máximo 72 chars, sin punto, sin mayúscula inicial
- Body separado por línea en blanco si existe
- Breaking change marcado correctamente si aplica
- Referencia a issue si el usuario la aportó
Confirmación:
- Propuesta mostrada y confirmación recibida
信息确认:
- 已完整查看和
git statusgit diff - 类型、作用域和描述均来自diff,未自行编造
- 已知当前分支
- 已确定偏好语言
- 意图明确:单个提交 vs 拆分为多个提交
验证项:
- 已执行敏感信息检测且无匹配结果
- 每个提交仅包含单个逻辑变更
- 除非用户明确要求,否则未使用、
--force、--hard、--no-verify--amend - 分支安全或用户已确认提交
格式检查:
- 首行格式有效
<type>[scope]: <description> - 描述:使用现在时祈使动词,最多72字符,无句点,首字母不大写
- 若存在Body,已用空行分隔
- 若为破坏性变更,已正确标记
- 若用户提供Issue编号,已正确引用
确认环节:
- 已展示提案并收到用户确认
Ejemplos
示例
Ejemplo 1 — Commit estándar
- Entrada: «Acabo de corregir el bug del cupón vacío en el checkout; diff solo en .»
src/cart/checkout.ts - Salida:
git commit -m "fix(cart): validate empty coupon before apply"
Ejemplo 2 — Cambios mezclados
- Entrada: Diff incluye ,
README.mdydocs/api.mdcon una ruta nueva.src/api/users.ts - Salida: Dos commits: y
docs: update API endpoint reference.feat(users): add endpoint to fetch user preferences
Ejemplo 3 — Breaking change
- Entrada: Diff renombra endpoint público →
/v1/usersrompiendo clientes existentes./v2/users - Salida:
feat(api)!: rename users endpoint to v2 BREAKING CHANGE: `/v1/users` removed; clients must migrate to `/v2/users`.
Ejemplo 4 — Información incompleta
- Entrada: «Haz commit de lo que está en staging.» Cambios cruzan varios módulos sin patrón claro.
- Comportamiento: Preguntar la intención principal o proponer agrupación. No generar mensaje genérico.
Ejemplo 5 — Fallo de hook
- Entrada: Hook de lint falla en tras
src/utils.ts.git commit - Comportamiento: Aplicar el formateo, , commit nuevo con el mismo mensaje. Sin
git add src/utils.tsni--amend.--no-verify
Ejemplo 6 — Secreto detectado
- Entrada: Diff staged incluye con
config/.env.local.DB_PASSWORD=hunter2 - Comportamiento: Detener, reportar archivo y línea. Sugerir . No commitear sin confirmación explícita.
git restore --staged config/.env.local
示例1 — 标准提交
- 输入: «我刚修复了结账时空优惠券的Bug;diff仅涉及。»
src/cart/checkout.ts - 输出:
git commit -m "fix(cart): validate empty coupon before apply"
示例2 — 混合变更
- 输入: Diff包含、
README.md和docs/api.md中的新接口。src/api/users.ts - 输出: 两个提交:和
docs: update API endpoint reference。feat(users): add endpoint to fetch user preferences
示例3 — 破坏性变更
- 输入: Diff将公开接口重命名为
/v1/users,会影响现有客户端。/v2/users - 输出:
feat(api)!: rename users endpoint to v2 BREAKING CHANGE: `/v1/users`已移除;客户端需迁移至`/v2/users`。
示例4 — 信息不完整
- 输入: «提交暂存区的内容。» 变更涉及多个无明确关联的模块。
- 行为: 询问用户主要意图或提议分组方式。不生成通用消息。
示例5 — Hook失败
- 输入: 后lint Hook在
git commit执行失败。src/utils.ts - 行为: 应用格式化修正,执行,使用相同消息创建新提交。不使用
git add src/utils.ts或--amend。--no-verify
示例6 — 检测到敏感信息
- 输入: 暂存区的Diff包含中的
config/.env.local。DB_PASSWORD=hunter2 - 行为: 立即停止,报告文件和行号。建议执行。无用户明确确认则不提交。
git restore --staged config/.env.local
Anti-patterns
反模式
- Commit que mezcla features, fixes y refactors sin relación.
- Mensajes vagos (,
update,fix stuff,changes).wip - Inventar tipo o scope cuando el diff no lo respalda.
- Incluir archivos sensibles (, claves) sin detección y confirmación.
.env - Saltar la detección de secretos confiando en inspección visual.
- Saltar hooks con por comodidad.
--no-verify - Usar tras fallo de hook en lugar de crear un commit nuevo.
--amend - Force push a /
main.master - Modificar configuración global de git sin permiso explícito.
- Ejecutar sin mostrar la propuesta y esperar confirmación.
git commit - Lanzar preguntas como prosa libre cuando el cliente expone la herramienta estructurada.
- Narrar el trabajo al usuario — reportar solo SHA, mensaje final y pendientes.
- 提交混合无关联的功能、修复和重构内容。
- 使用模糊消息(、
update、fix stuff、changes)。wip - 当diff无法支撑时自行编造类型或作用域。
- 未检测和确认就包含敏感文件(、密钥等)。
.env - 跳过敏感信息检测仅依赖人工检查。
- 为图方便跳过Hook使用。
--no-verify - Hook失败后使用而非创建新提交。
--amend - 向/
main执行force push。master - 无用户明确许可修改git全局配置。
- 未展示提案并等待确认就执行。
git commit - 当客户端提供结构化工具时仍使用自由文本提问。
- 向用户详述操作过程——仅报告最终SHA、提交消息和待办事项。