mcpField
G
git-commit

git-commit

github.com/bhagyamudgal開発2116 回インストール3 日前に更新
リポジトリ

git-commit について

実際の差分に基づいて Conventional Commits 形式のメッセージを作成し、コミットするための Git ワークフロースキルです。開発者向けに、ステージング、フック、分離コミットの保護策を備えています。

主な機能

  1. 01差分からメッセージを作成
  2. 02ファイルを個別のコミットに分類
  3. 03秘密情報のステージング回避
  4. 04フックを無効化せず実行
  5. 05分離ワークツリーで検証済みコミットを作成
  6. 06追記のみのコミット操作

活用シーン

  1. 01一行または詳細なコミットメッセージの作成
  2. 02混在した変更の複数コミットへの分割
  3. 03検証済みコンテンツスナップショットの安全なコミット

インストール

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

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

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

詳細

conventional commits 形式での Git コミット

実際の差分を読んで、タイプ、スコープ、メッセージを決めます。タスクの記憶を頼りにメッセージを書くことはありません。

メッセージのみのモード

コミットを依頼されるのではなく、「コミットメッセージを考えて」や「コミットメッセージの提案」といった形でメッセージを求められた場合は、通常どおり差分を分析し、実行用に1行版と詳細版の2つを出力します。

ワークフロー

1. 差分を分析する
git diff --staged        # if files are staged
git diff                 # if nothing staged
git status --porcelain

メッセージを書く前に、git status --porcelain の各ファイルを必ずいずれか1つのコミットに分類します。差分が混在している場合は、曖昧なメッセージでまとめず、複数のコミットに分けます。

2. ファイルをステージする

差分を読んだファイルだけをステージします。.env、credentials.json、鍵ファイルはステージしません。

呼び出し元から Verified content snapshot が渡された場合は、ブランチ、古い HEAD、元のインデックスツリーを記録し、その HEAD の使い捨ての detached worktree で候補コミットを作成します。検証済みツリーをその worktree のインデックスとファイルに読み込み、git write-tree がスナップショットと一致することを確認してから、通常のコミットをそこで実行し、すべてのフックを動かします。候補コミットの HEAD^{tree} がスナップショットと一致することを確認します。フックの失敗や不一致があっても、実際のブランチには影響しません。

実際のブランチに触れる前に、候補コミットから分離した置換用インデックスを準備し、そのツリーがスナップショットと一致することを確認します。候補コミットと置換用インデックスの準備が完了してから、実際のインデックスロックを排他的に取得します。ロックを保持している間に、実際のインデックスを分離したパスにコピーし、そのツリーが記録した元のインデックスツリーと一致することを確認します。不一致の場合はロックを解放し、ブランチには触れません。記録したブランチを記録した古い HEAD から候補コミットへアトミックに進め、準備したインデックスのバイト列を保持中のロックに書き込み、ロック中のインデックスツリーがスナップショットと一致することを確認してから、ワークツリーを変更せずに実際のインデックスとしてアトミックにインストールします。どの経路でもロックを解放し、使い捨ての worktree を削除します。ブランチを進めた後にインデックスのインストールまたは読み戻しに失敗した場合は、ブランチ、候補コミット、記録したインデックスツリー、復旧コマンドとともに branch advanced / index not refreshed を報告します。ブランチの更新を再試行したり、部分的な状態を隠したりすることはありません。フックや別の Git コマンドがまだ必要としている間は実際のインデックスロックを取得せず、実際のブランチ上で候補コミットを作成せず、稼働中のワークツリーを再ステージすることもありません。

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

差分から、タイプ、スコープ(影響を受ける領域またはモジュールを指します)、説明を読み取ります。

件名は命令形で72文字未満にし、WHAT ではなく WHY を伝えます。WHAT は差分からすでに分かります。本文には重要な変更を - の箇条書きで記載し、最大3〜5項目にします。

1年後に git log を実行する人に向けてメッセージを書きます。メッセージでは em ダッシュも en ダッシュも使いません。unslop がインストールされている場合は、残りのルールに対応します。

4. コミットする
# Single line
git commit -m "<type>[scope]: <description>"

# Multi-line: one quoted -m string, newlines inside the quotes
git commit -m "<type>[scope]: <description>

<optional body>

<optional footer>"

1つのコミットにつき、アトミックな変更を1つだけ取り込みます。

ここでの Git 操作はすべて追記専用です。ステージしてコミットし、フックに失敗した場合は修正して、そのコミットを amend するのではなく、その上に新しいコミットを作成します。

この表現の例外となるものが4つあります。明確に伝えておきます。git config には手を加えず、--no-verify を使わずにフックを実行させ、明示的な依頼がない限り --force とハードリセットを使わず、main への force-push は決して行いません。

コメント