Gitを使っていると、「コミットにはどのような情報が保存されているのか」「過去に保存したファイルの内容を確認したい」と思うことがあります。
Gitは、ファイルの内容やコミットの情報などを「オブジェクト」という単位で管理しています。そのオブジェクトの内容や種類を調べるときに使えるのが、git cat-fileコマンドです。
この記事では、git cat-fileの基本的な意味から、主なオプション、実行結果の読み方、git showとの違いまで、具体例を交えてわかりやすく解説します。
git cat-fileとは?

git cat-fileとは、Gitリポジトリに保存されているオブジェクトの内容・種類・サイズなどを確認するためのコマンドです。
簡単にいうと、「Gitが内部で保存しているデータを調べるコマンド」です。
例えば、現在のコミットがどの種類のオブジェクトなのかを確認するには、次のように実行します。
git cat-file -t HEAD
# 実行結果
commit-tはオブジェクトの種類を表示するオプションです。HEADは現在のコミットを指しているため、実行結果にはcommitと表示されます。
また、-pを指定すると、そのオブジェクトの内容を確認できます。
git cat-file -p HEAD
# 実行結果
tree 57892650fed5bf6595b8bbbf7afcd976c26482ef
author Example User <user@example.com> 1791262800 +0900
committer Example User <user@example.com> 1791262800 +0900
Add sample.txtこの場合は、現在のコミットに保存されている、作成者やコミットメッセージなどの情報が表示されます。
Gitのオブジェクトとは?
Gitのオブジェクトとは、ファイルの内容やディレクトリ構造、コミットの情報などを保存するためのデータです。
主に、次の4種類があります。
| 種類 | 保存する主な情報 |
blob | ファイルの内容 |
tree | ファイル名・ディレクトリ名と、それぞれに対応するオブジェクトIDなど |
commit | 対応するtree、親コミット、作成者、コミットメッセージなど |
tag | 注釈付きタグの対象、作成者、メッセージなど |
例えば、sample.txtをコミットした場合、ファイルの内容はblobに保存されます。sample.txtという名前と、そのblobとの対応関係はtreeが持ちます。そして、commitがそのtreeを参照します。
ファイル名とファイルの内容は、別のオブジェクトで管理されているという点がポイントです。
それぞれのオブジェクトには、識別用の「オブジェクトID」が付いています。コミットIDもオブジェクトIDの一種です。
git cat-fileの基本構文と主なオプション
1つのオブジェクトを確認する場合、基本的には次の形式で実行します。
git cat-file オプション オブジェクト「オブジェクト」には、オブジェクトIDやHEADなど、確認したい対象を指定します。
主なオプションは、次のとおりです。
| オプション | 意味 | 使用例 |
-p | オブジェクトの種類に応じた形式で内容を表示する | git cat-file -p HEAD |
-t | オブジェクトの種類を表示する | git cat-file -t HEAD |
-s | オブジェクトのサイズをバイト単位で表示する | git cat-file -s HEAD |
-e | オブジェクトが存在し、有効かどうかを終了ステータスで確認する | git cat-file -e HEAD |
最初は、内容を見る-pと、種類を調べる-tを覚えると理解しやすくなります。
なお、-p・-t・-s・-eは、基本的にいずれか1つを選んで使用します。-ptのようにまとめて指定して、内容と種類を同時に表示する使い方ではありません。
git cat-fileの使い方
ここからは、実際に小さなリポジトリを作り、オブジェクトを確認してみましょう。
まず、新しい作業用ディレクトリを作り、sample.txtをコミットします。
mkdir cat-file-demo
cd cat-file-demo
git init
printf 'Hello, Git!\n' > sample.txt
git add sample.txt
git commit -m "Add sample.txt"sample.txtには、Hello, Git!という文字列と、末尾の改行が保存されます。
これ以降のコマンドは、作成したcat-file-demoディレクトリ内で実行してください。
オブジェクトの種類を確認する:-t
-tを指定すると、対象がcommit・tree・blob・tagのどれなのかを確認できます。
例えば、現在のコミットの種類を確認するには、次のように実行します。
git cat-file -t HEAD
# 実行結果
commit一方、現在のコミットに保存されているsample.txtの種類を確認するには、次のように実行します。
git cat-file -t HEAD:sample.txt
# 実行結果
blobHEAD:sample.txtは、「現在のコミットに保存されているsample.txt」を指定する書き方です。
同じコミットに関係するデータでも、コミット自体はcommit、ファイルの内容はblobという違いがあります。
ファイルの内容を確認する:-p
-pを指定すると、対象のオブジェクトの内容を確認できます。
例えば、現在のコミットに保存されているsample.txtの内容を表示するには、次のように実行します。
git cat-file -p HEAD:sample.txt
# 実行結果
Hello, Git!ここで表示されるのは、現在の作業ディレクトリにあるファイルではなく、指定したコミットに保存されているファイルの内容です。
例えば、コミット後に手元のsample.txtを編集しても、新しくコミットしてHEADが更新されるまでは、このコマンドの表示内容は変わりません。
オブジェクトのサイズを確認する:-s
-sを指定すると、オブジェクトのサイズをバイト単位で確認できます。
例えば、sample.txtの内容に対応するオブジェクトのサイズを調べるには、次のように実行します。
git cat-file -s HEAD:sample.txt
# 実行結果
12今回のファイルには、ASCII文字11文字のHello, Git!と、1バイトの改行が入っているため、結果は12になります。
バイト数は、文字数と必ず一致するわけではありません。 日本語など、文字コードによって1文字が複数バイトになる文字もあります。
また、ここで確認するサイズは、Gitが圧縮してディスクに保存した際の容量とは異なります。
オブジェクトの存在を確認する:-e
-eを指定すると、対象のオブジェクトが存在し、有効かどうかを確認できます。
例えば、現在のコミットにsample.txtが保存されているかを確認するには、次のように実行します。
git cat-file -e HEAD:sample.txt
echo $?
# 実行結果
0-eは、成功しても内容を表示しません。成功したかどうかは「終了ステータス」で判断します。
Bashでは、直前のコマンドの終了ステータスを$?で確認できます。上の例では0なので、確認に成功しています。
| 終了ステータス | 意味 |
0 | 対象が存在し、有効なオブジェクトとして確認できた |
0以外 | 対象が見つからないなどの理由で確認に失敗した |
スクリプト内では、次のように条件分岐と組み合わせることもできます。
if git cat-file -e HEAD:sample.txt 2>/dev/null; then
echo "sample.txtはコミットに保存されています"
else
echo "sample.txtを確認できませんでした"
fi
# 実行結果
sample.txtはコミットに保存されています2>/dev/nullは、確認に失敗したときのエラーメッセージを表示しないための指定です。
コミットやディレクトリ構造を確認する
git cat-file -pは、ファイルの内容だけでなく、コミットやディレクトリ構造の確認にも使用できます。
コミットの内容を確認する
現在のコミットの内容を確認するには、次のように実行します。
git cat-file -p HEAD今回のような最初のコミットでは、次のような情報が表示されます。オブジェクトIDやユーザー情報、日時は環境によって異なります。
tree 57892650fed5bf6595b8bbbf7afcd976c26482ef
author Example User <user@example.com> 1791262800 +0900
committer Example User <user@example.com> 1791262800 +0900
Add sample.txt各項目の意味は、次のとおりです。
| 項目 | 意味 |
tree | このコミットのファイル・ディレクトリ構造を表すtreeのID |
author | 変更の作成者と、その日時 |
committer | コミットを記録した人と、その日時 |
| 空行より後の文章 | コミットメッセージ |
なお、authorとcommitterは同じになることが多いものの、別の人が作成した変更を取り込む場合などには異なることがあります。
treeの内容を確認する
現在のコミットが参照しているtreeの内容を確認するには、次のように実行します。
git cat-file -p 'HEAD^{tree}'
# 実行結果
100644 blob 670a245535fe6316eb2316c1103b1a88bb519334 sample.txtHEAD^{tree}は、現在のコミットに対応するtreeを指定する書き方です。
今回の実行結果は、次のように読み取れます。
| 表示内容 | 意味 |
100644 | 実行可能フラグのない通常ファイルを表すモード |
blob | 対象のオブジェクトの種類 |
670a245... | ファイルの内容を保存しているオブジェクトのID |
sample.txt | ファイル名 |
オブジェクトIDを指定して内容を確認する
treeの表示から分かったオブジェクトIDを使って、ファイルの内容を確認することもできます。
今回の例では、次のように実行します。実際に試す際は、直前のtreeの表示で確認したオブジェクトIDを指定してください。
git cat-file -p 670a245535fe6316eb2316c1103b1a88bb519334
# 実行結果
Hello, Git!このように、コミットからtreeを調べ、treeからファイルの内容を保存するblobを調べることで、Git内部のデータのつながりを確認できます。
確認するオブジェクトの指定方法
git cat-fileでは、オブジェクトID以外にも、ブランチ名やファイルのパスなどを使って対象を指定できます。
| 指定方法 | 意味 |
HEAD | 現在のコミット |
HEAD~1 | 現在のコミットの1つ前の親コミット |
main | mainブランチが指しているコミット |
HEAD:sample.txt | 現在のコミットに保存されているsample.txt |
HEAD~1:sample.txt | 1つ前の親コミットに保存されているsample.txt |
:sample.txt | インデックスに登録されているsample.txt |
HEAD^{tree} | 現在のコミットに対応するtree |
例えば、git addでインデックスに登録した内容を確認するには、次のように実行します。
git cat-file -p :sample.txt
# 実行結果
Hello, Git!インデックスとは、次のコミットに含める内容を準備しておく場所です。
HEAD:sample.txtはコミット済みの内容、:sample.txtはインデックスに登録された内容を表します。git addの後にファイルを編集した場合、その編集内容は、もう一度git addするまでインデックスには反映されません。
git cat-fileとgit showの違い
git cat-fileとgit showは、どちらもGitに保存された情報を確認できますが、主な用途が異なります。
| 比較項目 | git cat-file | git show |
| 主な用途 | オブジェクトの内容や属性を調べる | コミットの変更内容などを確認する |
| コミットを指定した場合 | -pではtree・parent・authorなどの内部情報を表示する | 通常はコミット情報と変更差分を表示する |
| 種類・サイズの確認 | -t・-sで確認できる | 主な用途ではない |
| 向いている場面 | Gitの内部構造の学習、オブジェクトの調査 | 日常的な変更内容の確認 |
例えば、現在のコミットで「何が変更されたのか」を知りたい場合は、次のコマンドが便利です。
git show HEAD
# 実行結果
commit d3b9373902fc68c44f57421001c009461f1a9d3d
Author: Example User <user@example.com>
Date: Tue Oct 6 14:00:00 2026 +0900
Add sample.txt
diff --git a/sample.txt b/sample.txt
new file mode 100644
index 0000000..670a245
--- /dev/null
+++ b/sample.txt
@@ -0,0 +1 @@
+Hello, Git!一方、コミットオブジェクトに「どのような情報が保存されているのか」を確認する場合は、次のように実行します。
git cat-file -p HEAD
# 実行結果
tree 57892650fed5bf6595b8bbbf7afcd976c26482ef
author Example User <user@example.com> 1791262800 +0900
committer Example User <user@example.com> 1791262800 +0900
Add sample.txtなお、ファイルの内容だけであれば、git showでも確認できます。
git show HEAD:sample.txt
# 実行結果
Hello, Git!普段の開発でコミットの変更内容を見るならgit show、オブジェクトの種類や内部情報まで調べるならgit cat-fileが役立ちます。
git cat-fileとcatコマンドの違い
catは、作業ディレクトリなどにあるファイルを読み取るコマンドです。一方、git cat-fileは、Gitに保存されているオブジェクトを読み取ります。
例えば、次の2つは確認する対象が異なります。
cat sample.txt
git cat-file -p HEAD:sample.txt
# 実行結果
Hello, Git!
Hello, Git!前者は手元のファイル、後者は現在のコミットに保存されたファイルの内容を表示します。
そのため、git cat-file -p sample.txtのようにファイル名だけを渡しても、手元のファイルを読む指定にはなりません。
本記事のまとめ
この記事では「git cat-file」について、以下の内容を説明しました。
git cat-fileは、Gitオブジェクトの内容・種類・サイズなどを確認するコマンド- Gitの主なオブジェクトには、
blob・tree・commit・tagがある - 内容を見る場合は
-p、種類を調べる場合は-tを使用する - サイズの確認には
-s、存在や有効性の確認には-eを使用する HEAD:ファイル名でコミット済みの内容、:ファイル名でインデックスの内容を確認できる
まずはgit cat-file -p HEADとgit cat-file -p HEAD:sample.txtを実行して、コミットの情報とファイルの内容がどのように保存されているのかを確認してみましょう。