mcpField
G
git-commit

git-commit

github.com/zlliang開発0282 回インストール2 日前に更新
リポジトリ

git-commit について

Conventional Commits 形式で Git コミットを作成する開発者向けの手順ガイドです。実際の差分を確認し、変更に基づいてタイプ、スコープ、メッセージを決めます。

主な機能

  1. 01状態を確認してコミット範囲を決定
  2. 02ステージ済みまたは作業ツリーの差分を分析
  3. 03Conventional Commits に沿ったタイプ選択
  4. 04必要に応じた破壊的変更マーカーの処理
  5. 05コミット後の状態と履歴の確認

活用シーン

  1. 01機能追加や修正の標準的なメッセージ作成
  2. 02ステージ済みの論理的変更だけをコミット
  3. 03ドキュメント、テスト、ビルドの変更を区別
  4. 04コミット後の作業ツリー状態の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/zlliang/skills --skill git-commit

インストール後、Claude Code で/git-commitを入力して読み込まれたか確認します。

同梱ファイルreferences/conventional-commits.md

詳細

Conventional Commits による Git コミット

Conventional Commits 仕様に従って、標準化されたセマンティックな git コミットを作成します。実際の差分を分析し、適切なタイプ、スコープ、メッセージを決定します。

コミット形式

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]

コミットタイプ

タイプ目的
feat新機能
fixバグ修正
docsドキュメントのみ
styleフォーマット/スタイル(ロジック変更なし)
refactorコードのリファクタリング(機能追加・修正なし)
perfパフォーマンスの改善
testテストの追加/更新
buildビルドシステム/依存関係
ciCI/設定の変更
choreメンテナンス/その他
revertコミットの取り消し

破壊的変更

タイプ/スコープの後に感嘆符を付けます。

feat!: remove deprecated endpoint

または、「BREAKING CHANGE」フッターを付けます。

feat: allow config to extend other configs

BREAKING CHANGE: `extends` key behavior changed

ワークフロー

1. ステータスを確認する
git status --porcelain

デフォルトの動作:

  • すでにステージされている変更があれば、そちらを優先します。
  • ステージ済みの変更がなければ、まとまりのある論理的な変更のみをステージします。
  • 無関係なワークツリーの変更には手を加えません。
2. 差分を分析する
# If files are staged, use staged diff.
git diff --staged

# If nothing is staged, use working tree diff.
git diff

ステージ済みの変更と未ステージの変更が混在している場合、デフォルトではステージ済みの変更のみをコミットします。ステージ済みの変更が不完全と思われる場合は、未ステージの差分を確認し、密接に関連するファイルもステージするか、ユーザーに確認します。

3. ファイルをステージする(必要な場合)

ステージ済みの変更がない場合や、変更を別のまとまりに分けたい場合:

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

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

シークレットは絶対にコミットしないでください(.env、credentials.json、秘密鍵)。

4. コミットメッセージを作成する

差分を分析して、以下を決定します。

  • タイプ:どのような種類の変更ですか?
  • スコープ:どの領域/モジュールが影響を受けますか?
  • 説明:変更内容を1行で要約します。(現在形、命令形、72文字未満)

正確な範囲で最も小さいタイプとスコープを使用します。本文のない短い1行のコミットを優先します。1文で明確に要約できないほど変更が大規模、または複雑な場合に限り、本文を追加します。補足できる情報があるという理由だけで、説明用の本文を追加しないでください。

破壊的変更の構文は、差分によって公開されている契約が実際に変更される場合にのみ使用します。

5. コミットを実行する
# 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
)"

ベストプラクティス

  • 1つのコミットにつき、論理的な変更は1つにします。
  • 現在形を使います。「added」ではなく「add」。
  • 命令形を使います。「fixes bug」ではなく「fix bug」。
  • 説明は72文字未満にします。
  • 差分またはユーザーの依頼にその情報が含まれている場合に限り、Closes #123 や Refs #456 などのトレーラーでイシューを参照します。本文がない場合は、説明の後に追加します。例:feat: add login, closes #123

Git の安全プロトコル

  • git config は絶対に更新しないでください。
  • 明示的な依頼がない限り、破壊的なコマンド(--force、hard reset)は実行しないでください。
  • ユーザーからの依頼がない限り、フックをスキップしないでください(--no-verify)。
  • main/master への強制プッシュは絶対にしないでください。
  • コミット作成前にフックが失敗した場合は、問題を修正して再試行します。
  • コミット作成後に検証が失敗した場合、依頼がない限り amend しないでください。

最終確認

コミット後:

git status --short
git log -1 --oneline

新しいコミットハッシュと件名を報告します。未ステージまたは未追跡の変更が残っている場合は、その旨も伝えます。

参考資料

コメント