コミット SHA とは?
コミット SHA はコミットを識別する一意のハッシュで、その内容から導出されるため、どんな変更も全く異なる識別子を生み出します。
コミット SHA はコミットに対する Git の指紋です。これは parent を含むコミットの内容から計算される長いハッシュであり、履歴のその正確なスナップショットを一意に名付けます。SHA は Git、そしてあなたの CI システムが、コミットを曖昧さなく参照する手段です。
SHA が導出される仕組み
Git はコミットの内容 - その tree、parent、author、メッセージ - をハッシュ化して固定長の識別子にします。ハッシュはコミットとその祖先のすべてに依存するため、過去のいずれかのバイトを変更すると全く異なる SHA が得られます。これが Git の履歴を改ざん検知可能にしているものです。
SHA を使う
どのコマンドでも、完全な SHA または短縮した SHA でコミットを参照できます。
Referencing commits by SHA
git show a1b2c3d4
git checkout a1b2c3d4e5f6
git log --format="%H"完全な SHA と短縮 SHA
完全な SHA は長いですが、Git はリポジトリ内で一意である限り短い接頭辞を受け付けます。短縮 SHA は人間にとって便利で、一方、完全な SHA は依存関係を正確なコミットに固定するなど、絶対的な精度が重要な場面で使われます。
CI/CD におけるコミット SHA
CI は各パイプライン実行を特定のコミット SHA に結び付けるので、ビルド結果は常に正確なコードに対応します。サードパーティのアクションを、移動するタグではなく完全な SHA に固定することは、セキュリティのベストプラクティスです。レビュー済みの正確なコードを実行することが保証され、馴染みのタグ名の下で密かに変更されることがなくなります。
SHA を扱う
- 曖昧さがないときは短縮 SHA でコミットを参照しましょう。
- 正確さとセキュリティが重要な場面では完全な SHA を使いましょう。
- サプライチェーンの密かな変更を防ぐため、CI のアクションを SHA に固定しましょう。
- トレーサビリティのために、デプロイやログを SHA に結び付けましょう。
重要なポイント
- コミット SHA は、コミットの内容から導出される一意の識別子です。
- 履歴へのどんな変更も、全く異なる SHA を生み出します。
- CI のアクションを完全な SHA に固定すると、セキュリティと再現性が向上します。
関連ガイド
What Is a Git Commit?What is a Git commit? An explainer covering what a commit records, its message and hash, how commits form his…
What Is a Signed Commit?What is a signed commit? Learn how cryptographic signatures prove who authored a commit, how verification wor…
What Is a Git Tag?What is a Git tag? An explainer on lightweight versus annotated tags, how tags mark specific commits like rel…