git cat-fileとは?Gitオブジェクトの確認方法や使い方をわかりやすく解説!

Gitを使っていると、「コミットにはどのような情報が保存されているのか」「過去に保存したファイルの内容を確認したい」と思うことがあります。

Gitは、ファイルの内容やコミットの情報などを「オブジェクト」という単位で管理しています。そのオブジェクトの内容や種類を調べるときに使えるのが、git cat-fileコマンドです。

この記事では、git cat-fileの基本的な意味から、主なオプション、実行結果の読み方、git showとの違いまで、具体例を交えてわかりやすく解説します。

git cat-fileとは?

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

# 実行結果
blob

HEAD: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.txt

HEAD^{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つ前の親コミット
mainmainブランチが指しているコミット
HEAD:sample.txt現在のコミットに保存されているsample.txt
HEAD~1:sample.txt1つ前の親コミットに保存されている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-filegit 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を実行して、コミットの情報とファイルの内容がどのように保存されているのかを確認してみましょう。

スポンサーリンク