Skip to content
Latchkey

コミット 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 に固定すると、セキュリティと再現性が向上します。

関連ガイド