AgentSkillsCN

git-commit-package

在单体仓库环境中,执行带有传统提交消息分析、智能暂存与消息生成功能的git commit。适用于用户请求提交更改、创建git commit,或提及“/commit”时使用。支持:(1) 自动从更改中检测类型与范围;(2) 根据diff生成传统提交消息;(3) 提供交互式提交功能,允许用户选择性地覆盖类型、范围或描述;(4) 实现智能文件暂存,按逻辑分组。在单体仓库中,若需提交多个文件,应在提交前使用“git add .”。

SKILL.md
--- frontmatter
name: git-commit-package
description: 'Execute git commit with conventional commit message analysis, intelligent staging, and message generation in a monorepo context. Use when user asks to commit changes, create a git commit, or mentions "/commit". Supports: (1) Auto-detecting type and scope from changes, (2) Generating conventional commit messages from diff, (3) Interactive commit with optional type/scope/description overrides, (4) Intelligent file staging for logical grouping. In a monorepo, if multiple files are to be committed, use "git add ." before committing.'
license: MIT
allowed-tools: Bash

Git Commit (Monorepo/Package-aware) with Conventional Commits

Overview

Create standardized, semantic git commits using the Conventional Commits specification. Analyze the actual diff to determine appropriate type, scope, and message.

Conventional Commit Format

code
<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

Commit Types

TypePurpose
featNew feature
fixBug fix
docsDocumentation only
styleFormatting/style (no logic)
refactorCode refactor (no feature/fix)
perfPerformance improvement
testAdd/update tests
buildBuild system/dependencies
ciCI/config changes
choreMaintenance/misc
revertRevert commit

Breaking Changes

code
# Exclamation mark after type/scope
feat!: remove deprecated endpoint

# BREAKING CHANGE footer
feat: allow config to extend other configs

BREAKING CHANGE: `extends` key behavior changed

Monorepo Context

This skill is designed for use in a monorepo. If you need to commit changes affecting multiple files or packages, always stage all changes in the current package (or workspace) before committing. Use git add . from the package root to ensure all relevant files are included.

Workflow

1. Analyze Diff

bash
# If files are staged, use staged diff
git diff --staged

# If nothing staged, use working tree diff
git diff

# Also check status
git status --porcelain

2. Stage Files (if needed)

If nothing is staged or you want to group changes différemment :

bash
# Stage specific files
git add path/to/file1 path/to/file2

# Stage by pattern
git add *.test.*
git add src/components/*

# Interactive staging
git add -p

# Monorepo: stage all changes in the current package
git add .

Never commit secrets (.env, credentials.json, private keys).

3. Generate Commit Message

Analyze the diff to determine:

  • Type: What kind of change is this?
  • Scope: What area/module is affected?
  • Description: One-line summary of what changed (present tense, imperative mood, <72 chars)

4. Execute Commit

bash
# Single line
git commit -m "<type>[scope]: <description>"

# Multi-line with body/footer
git commit -m "$(cat <<'EOF'
<type>[scope]: <description>

<optional body>

<optional footer>
EOF
)"

Best Practices (Monorepo)

  • Dans un monorepo, privilégier des commits atomiques par package ou par fonctionnalité.
  • Toujours utiliser git add . à la racine du package si plusieurs fichiers sont concernés.
  • One logical change per commit
  • Present tense: "add" not "added"
  • Imperative mood: "fix bug" not "fixes bug"
  • Reference issues: Closes #123, Refs #456
  • Keep description under 72 characters

Git Safety Protocol

  • NEVER update git config
  • NEVER run destructive commands (--force, hard reset) without explicit request
  • NEVER skip hooks (--no-verify) unless user asks
  • NEVER force push to main/master
  • If commit fails due to hooks, fix and create NEW commit (don't amend)