git rev-listとは?コミット履歴の検索や件数の取得方法を解説!

Gitを使っていると、「コミットの件数を調べたい」「特定の期間や作成者に絞って履歴を確認したい」といった場面があります。

履歴の確認にはgit logがよく使われますが、条件に合うコミットIDの一覧や件数を取得するときに便利なのが、git rev-listコマンドです。

この記事では、git rev-listの基本的な意味から、履歴をたどる仕組み、コミットの検索、ブランチ間の比較、git logやgit rev-parseとの違いや使い分けまで、わかりやすく解説します。

git rev-listとは?

git rev-listとは、指定したコミットを起点に過去の履歴をたどり、条件に合うコミットを一覧表示するGitコマンドです。

コマンドを実行すると、通常はコミットを識別する「コミットID(ハッシュ値)」を1行ずつ表示します。オプションを付けると、表示件数を制限したり、期間や作成者で絞り込んだり、コミット数だけを取得したりできます。

例えば、mainブランチのコミットから履歴をたどる場合は、次のコマンドを実行します。

git rev-list main

# 実行結果
f7d8ea936429218dcda016e0eae45c33925c57e8
6686d1da9e863af4c6f0651d2d0be261cf7def76
1126f4eb4fa8d8e01266ecd33bfb59162979a0a

mainは、調べたいブランチの名前です。現在どのブランチで作業していても、調べる対象はmainブランチの履歴です。なお、mainブランチが存在しないリポジトリでは、実際のブランチ名に置き換えてください。

git rev-list mainは、mainの先端のコミット自身と、そこから親をたどって到達できるコミットを対象にします。標準では、コミッター日時が新しいコミットから表示されます。

git rev-listが履歴をたどる仕組み

Gitのコミットは、変更内容の説明だけでなく、そのコミットがどのコミットを引き継いで作られたかという情報も持っています。

この引き継ぎ元を「親コミット」と呼びます。

git rev-listは、この親コミットへの参照を使って過去の履歴をたどります。

例えば、下の図では、P、Q、Rの順にコミットが作られ、mainは最新のコミットRを指しています。

git rev-listが履歴をたどる仕組み

Rの親コミットはQ、Qの親コミットはPです。最初のコミットであるPには、親コミットがありません。

git rev-list mainを実行すると、Rを起点に親コミットをたどり、Q、Pへと履歴をさかのぼります。

この例ではコミットの日時もP、Q、Rの順なので、git rev-list mainを実行すると、図の右側のように、R、Q、Pに対応するコミットIDが表示されます。

実際の出力には、Rなどの英字は含まれません。わかりやすくするためにRなどの英字を含めています。

マージコミットには複数の親がある

下の図は、mainとfeatureで別々に進んだ履歴をマージし、コミットMが作られた例です。マージ後のmainは、Mを指しています。

git rev-listが履歴をたどる仕組み(マージコミットがある場合)

マージコミットMは、main側のRと、feature側のTという2つの親コミットを持っています。

git rev-list mainを実行すると、Mから両方の親コミットをたどります。そのため、main側の履歴だけでなく、取り込まれたfeature側のSとTも対象になります。両方の履歴に共通するPとQは、重複して表示されません。

この図では、コミットの日時がP、Q、R、S、T、Mの順になっていると仮定しています。そのため、右側の実行結果例では、M、T、S、R、Q、Pに対応するコミットIDが表示されています。

git rev-listの基本構文

git rev-listは、基本的に次の形式で使用します。

git rev-list [オプション] <コミットなどの指定> [-- <ファイルやディレクトリ>]

各部分の意味は、次のとおりです。

指定するもの意味
オプション件数制限や検索条件などを指定する
コミットなどの指定HEAD、ブランチ名、タグ名、コミットIDなどを指定する
--コミットの指定とファイルの指定を区切る
ファイルやディレクトリ指定したパスに関する履歴へ絞り込む

[]で囲まれた部分は省略できます。実際に入力するときに、[]や<>を付ける必要はありません。

コミット履歴の一覧と件数を取得する

mainブランチのコミット履歴を一覧表示する

mainブランチのコミット履歴を調べる場合は、次のコマンドを実行します。

git rev-list main

# 実行結果
f7d8ea936429218dcda016e0eae45c33925c57e8
6686d1da9e863af4c6f0651d2d0be261cf7def76
1126f4eb4fa8d8e01266ecd33bfb59162979a0a

このコマンドは、mainの先端のコミットから、親コミットをたどって過去の履歴を一覧表示します。 各行に表示される文字列が、コミットを識別するコミットIDです。

表示する件数を制限する

表示件数を制限したい場合は、--max-countを使用します。例えば、最初の2件だけを表示する場合は、次のコマンドを実行します。

git rev-list --max-count=2 main

# 実行結果
f7d8ea936429218dcda016e0eae45c33925c57e8
6686d1da9e863af4c6f0651d2d0be261cf7def76

--max-count=2は、表示するコミットを最大2件に制限する指定です。対象のコミットが2件より少なければ、存在する分だけ表示されます。

同じ指定は、git rev-list -n 2 mainという形式でも書けます。

コミット数だけを取得する

一覧ではなく、対象のコミットが何件あるかを調べる場合は、--countを使用します。

git rev-list --count main

# 実行結果
3

この例では、mainの先端からたどれるコミットが、その先端のコミット自身を含めて3件あることを示しています。

--countが数えるのはコミット数です。 変更したファイル数や、追加・削除した行数ではありません。

複数のブランチやタグを対象に数える

ローカルにあるブランチやタグなどからたどれるコミットをまとめて数える場合は、--allと--countを組み合わせます。

git rev-list --count --all

# 実行結果
12

--allは、ローカルリポジトリにあるブランチ、タグ、リモート追跡ブランチなどの参照と、HEADを起点にします。複数のブランチで共有されているコミットは、重複して数えません。

条件を指定してコミットを検索する

git rev-listでは、期間、著者、コミットメッセージなどを条件にして履歴を絞り込めます。

よく使うオプションは、次のとおりです。

オプション絞り込む条件
--since、--after指定した日時より新しいコミット
--until、--before指定した日時より古いコミット
--author著者の名前やメールアドレス
--committerコミッターの名前やメールアドレス
--grepコミットメッセージ
--all-match複数の--grep条件すべてに一致
--fixed-strings検索文字列を正規表現ではなく、そのままの文字列として扱う

期間で絞り込む

最近のコミットだけを調べたい場合は、--sinceを使用します。例えば、直近7日間のコミットを調べる場合は、次のコマンドを実行します。

git rev-list --since="7 days ago" main

"7 days ago"は「7日前」という意味です。条件に合うコミットがあれば、そのコミットIDが表示されます。該当するものがなければ、何も表示されません。

特定の期間を指定したい場合は、--sinceと--untilを組み合わせます。例えば、次のコマンドでは、指定した2つの日時の間にあるコミットを調べます。

git rev-list --since="2026-09-01T00:00:00+09:00" --until="2026-10-01T00:00:00+09:00" main

この例では、日時とともに、日本時間の時差を表す+09:00も指定しています。

期間の判定にはコミッター日時が使われます。著者日時とは異なる場合があります。

著者やコミッターで絞り込む

特定の著者による変更を調べたい場合は、--authorを使用します。例えば、著者情報にTanakaが含まれるコミットを調べる場合は、次のコマンドを実行します。

git rev-list --author="Tanaka" main

名前だけでなく、メールアドレスでも検索できます。ただし、検索条件は標準では正規表現として扱われます。メールアドレスなどを文字列として検索したい場合は、--fixed-stringsを付けます。

一方、コミットを記録した人を条件にする場合は、--committerを使用します。

git rev-list --committer="Tanaka" main

著者とコミッターは同じ人になることが多いものの、役割が異なります。

  • 著者(Author):変更の著者
  • コミッター(Committer):その変更をコミットとして記録した人

例えば、別の人のコミットをcherry-pickで取り込むと、元の著者情報を保ったまま、取り込んだ人がコミッターになることがあります。

コミットメッセージで絞り込む

コミットメッセージに特定の文字列が含まれるものを調べたい場合は、--grepを使用します。例えば、「ログイン」という文字列を含むコミットを検索する場合は、次のコマンドを実行します。

git rev-list --fixed-strings --grep="ログイン" main

--fixed-stringsを付けると、検索文字列を正規表現として解釈せず、そのままの文字列として扱います。

検索対象はコミットメッセージです。 ソースコードの中に「ログイン」という文字列があるかどうかを調べるコマンドではありません。

複数のキーワードのうち、どれかを含むコミットを検索する場合は、--grepを複数指定します。

git rev-list --fixed-strings --grep="ログイン" --grep="認証" main

この場合は、「ログイン」または「認証」を含むコミットが対象です。

両方のキーワードを含むコミットだけに絞り込みたい場合は、--all-matchを加えます。

git rev-list --fixed-strings --all-match --grep="ログイン" --grep="認証" main

これで、「ログイン」と「認証」の両方をコミットメッセージに含むものが対象になります。

特定のファイルに関する履歴を調べる

特定のファイルに関する履歴へ絞り込みたい場合は、--の後ろにファイルのパスを指定します。

例えば、プロジェクトのルートディレクトリで、src/login.jsに関するコミットを調べる場合は、次のコマンドを実行します。

git rev-list main -- src/login.js

このコマンドでは、指定したファイルに関する履歴へ対象を絞り込みます。ただし、表示されるのはコミットIDなので、具体的な変更内容を確認するにはgit showやgit log -pなどを使います。

複数の条件を組み合わせる

期間、著者、キーワードなどは組み合わせて指定できます。

例えば、「直近30日間」「著者情報にTanakaを含む」「メッセージにログインを含む」という条件でコミット数を調べる場合は、次のコマンドを実行します。

git rev-list --count --since="30 days ago" --author="Tanaka" --fixed-strings --grep="ログイン" main

このコマンドでは、指定した条件をすべて満たすコミットの件数が表示されます。

ブランチ間のコミットを比較する

A..Bは「B側にあり、A側にはないコミット」

A..Bは、Bからたどれるコミットのうち、Aからはたどれないコミットを指定する書き方です。

例えば、次のような履歴があるとします。

ブランチ間のコミットを比較する

mainからはC、B、Aをたどれます。一方、featureからはE、D、B、Aをたどれます。

この状態で、feature側にあり、main側にはないコミット数を調べる場合は、次のコマンドを実行します。

git rev-list --count main..feature

# 実行結果
2

対象はDとEなので、結果は2です。コミットIDを表示したい場合は、--countを外します。

逆に、main側にあり、feature側にはないコミット数を調べる場合は、順番を入れ替えます。

git rev-list --count feature..main

# 実行結果
1

この場合はCだけが対象なので、結果は1です。

^を付けて履歴を除外する

コミットやブランチの指定の前に^を付けると、そのコミット自身と、そこからたどれる過去のコミットを対象から除外できます。

例えば、featureの履歴からmainの履歴を除外する場合は、次のように指定します。

git rev-list --count feature "^main"

# 実行結果
2

これは、git rev-list --count main..featureと同じ対象を指定しています。

先ほどの図では、mainからたどれるC、B、Aが除外対象となり、結果としてfeature側のDとEが残ります。featureからたどれるE・D・B・Aのうち、mainからもたどれるB・Aを除外します。残るのはDとEの2件です。

^mainは、「mainの先端の1件だけを除外する」という意味ではありません。そこからたどれる履歴もまとめて除外します。

コマンド例では、シェルによる特殊文字の解釈を避けるため、"^main"を引用符で囲んでいます。

A...Bは「どちらか一方にだけあるコミット」

A...Bは、A側とB側のどちらか一方からだけたどれるコミットを指定します。両方からたどれる共通のコミットは除外されます。

先ほどの図では、main...featureの対象はC、D、Eです。

--left-rightと--countを組み合わせると、左右それぞれに固有のコミット数を取得できます。

git rev-list --left-right --count main...feature

# 実行結果
1	2

結果はタブで区切られており、次の意味になります。

  • 左の1:main側にだけあるコミット数
  • 右の2:feature側にだけあるコミット数

リモートブランチとのコミット数の違いを確認する

ブランチ間のコミットを比較する

origin/mainとmainを比較すると、ローカルとリモート側の履歴の違いを件数で確認できます。

origin/mainは、リモートのmainブランチについて、ローカルに保存されている情報です。リモート側の更新を反映してから比較したい場合は、先に次のコマンドを実行します。

git fetch origin

git fetchは、リモートのコミットなどを取得し、取得対象のリモート追跡ブランチを更新します。通常、現在の作業ブランチへ自動でマージすることはありません。

続いて、origin/mainとローカルのmainを比較します。この例は、originというリモートと、origin/main、mainが存在する場合のものです。

git rev-list --left-right --count origin/main...main

# 実行結果
2	3

この結果は、次の意味です。

結果意味
左の2origin/main側にだけあるコミットが2件
右の3main側にだけあるコミットが3件

ローカルのmainとorigin/mainを比較しているので、「リモート側の2件をまだ取り込んでおらず、ローカル側に固有の3件がある」と読めます。

git rev-list自体はリモートへ問い合わせません。比較に使われるのは、ローカルに保存されている履歴です。

git showと組み合わせて変更内容を確認する

git rev-listで対象のコミットを探した後、git showでその内容を確認すると、検索から調査へ進めます。

例えば、コミットメッセージに「ログイン」を含むものを検索します。

git rev-list --fixed-strings --grep="ログイン" main

# 実行結果
f7d8ea936429218dcda016e0eae45c33925c57e8

この例では、条件に合うコミットが1件見つかりました。続いて、表示されたコミットIDをgit showに指定します。

git show f7d8ea936429218dcda016e0eae45c33925c57e8

# 実行結果
commit f7d8ea936429218dcda016e0eae45c33925c57e8
Author: Tanaka <tanaka@example.com>
Date:   Wed Oct 7 10:00:00 2026 +0900

    ログイン時の入力チェックを追加

diff --git a/src/login.js b/src/login.js
index 8a21c4e..b37d902 100644
--- a/src/login.js
+++ b/src/login.js
@@ -1,5 +1,5 @@
 function validateUsername(username) {
-  if (username === "") {
+  if (username.trim() === "") {
     return false;
   }
 }

git showでは、コミットメッセージや著者情報、ファイルの変更差分などを確認できます。実際には、自分の検索結果に表示されたコミットIDへ置き換えてください。

このように、git rev-listで対象を選び、git showで中身を確認するという使い方ができます。

git log・git rev-parseとの違い

git rev-list、git log、git rev-parseは、いずれもコミットに関係しますが、よく使う目的が異なります。

比較項目git rev-list/td>git loggit rev-parse
主な用途コミット一覧や件数の取得履歴の内容を読むコミット指定の解析やGit情報の取得
代表的な例git rev-list --count maingit log --onelinegit rev-parse main
上記の例で得られるものコミット数短縮IDとメッセージの一覧mainの先端のコミットのオブジェクトID

変更内容を人が確認する場合は、コミットメッセージや差分を表示できるgit logが便利です。一方、スクリプトなどでコミットIDの一覧や件数を利用する場合は、git rev-listが役立ちます。

なお、git rev-listにも表示形式を変更するオプションがあります。「コミットメッセージを表示できないコマンド」というわけではありません。

あわせて読みたい

git rev-parseコマンドについては、以下の記事で詳しく説明しています。興味のある方は下記のリンクからぜひチェックをしてみてください。

本記事のまとめ

この記事では「git rev-list」について、以下の内容を説明しました。

  • git rev-listは、親コミットをたどってコミット一覧を取得するコマンド
  • --countで件数を取得し、期間・著者・メッセージなどで絞り込める
  • A..BはB側にだけある履歴、A...Bはどちらか一方にだけある履歴を対象にする
  • git showと組み合わせると、検索したコミットの変更内容を確認できる

お読みいただきありがとうございました。

スポンサーリンク