Git Commit with Conventional Commits
概要
Conventional Commits仕様に従い、標準化されたセマンティックgitコミットを作成します。実際の差分を分析して、適切なタイプ、スコープ、メッセージを決定します。
Conventional Commit形式
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
コミットタイプ
| タイプ | 目的 |
|---|---|
feat | 新機能 |
fix | バグ修正 |
docs | ドキュメントのみ |
style | フォーマット/スタイル(ロジックなし) |
refactor | コードリファクタリング(機能/修正なし) |
perf | パフォーマンス改善 |
test | テスト追加/更新 |
build | ビルドシステム/依存関係 |
ci | CI/設定変更 |
chore | メンテナンス/雑務 |
revert | コミットを元に戻す |
破壊的変更
# タイプ/スコープの後ろに感嘆符
feat!: remove deprecated endpoint
# BREAKING CHANGEフッター
feat: allow config to extend other configs
BREAKING CHANGE: `extends` key behavior changed
ワークフロー
1. 差分を分析
# ファイルがステージング済みの場合、ステージング済み差分を使用
git diff --staged
# ステージングされていない場合、ワーキングツリーの差分を使用
git diff
# ステータスも確認
git status --porcelain
2. ファイルをステージング(必要に応じて)
何もステージングされていない場合、または変更を別の方法でまとめたい場合:
# 特定のファイルをステージング
git add path/to/file1 path/to/file2
# パターンでステージング
git add *.test.*
git add src/components/*
# インタラクティブなステージング
git add -p
秘密情報(.env、credentials.json、秘密鍵など)を絶対にコミットしないでください。
3. コミットメッセージを生成
コミットメッセージは件名と本文の両方において、厳密かつ英語のみで記述する必要があります。 リポジトリ履歴にロシア語のコミットが含まれていても、コミットメッセージをロシア語で書かないでください。
差分を分析して以下を決定:
- タイプ:これはどの種類の変更ですか?
- スコープ:影響を受ける領域/モジュールは?
- 説明:何が変更されたかの1行要約(現在形、命令形、72文字未満)
4. コミットを実行
# 1行
git commit -m "<type>[scope]: <description>"
# 複数行(本文/フッター付き)
git commit -m "$(cat <<'EOF'
<type>[scope]: <description>
<optional body>
<optional footer>
EOF
)"
ベストプラクティス
- コミットメッセージは厳密に英語のみで記述してください(件名と本文)
- 1コミットに1つの論理的な変更
- 現在形:「add」(「added」ではない)
- 命令形:「fix bug」(「fixes bug」ではない)
- イシュー参照:
Closes #123、Refs #456 - 説明を72文字以内に抑える
Gitセーフティプロトコル
- git configを絶対に更新しない
- 明示的な要求なしに破壊的なコマンド(--force、hard reset)を実行しない
- ユーザーが要求しない限り、フックをスキップ(--no-verify)しない
- main/masterへの強制プッシュを絶対に行わない
- フックが原因でコミットが失敗した場合、修正して新しいコミットを作成する(修正しない)
- ユーザーに明示的に尋ねずに新しいブランチを絶対に作成しない。
ユーザーがブランチを要求しない限り、現在のブランチ(
mainを含む)に直接コミットする。 「安全性のため」に自動ブランチを作成しないでください。ユーザーがブランチ管理を行います。 ブランチが必要だと思った場合は、作成する前に尋ねてください。 - ユーザーが要求しない限り、新しいリモートブランチにプッシュしたり、MR/PRを開いたりしない。