1. ホーム
  2. 記事一覧
  3. git shortlogとは?git logとの違いを合わせて解説

2024.04.28

git shortlogとは?git logとの違いを合わせて解説

記事の概要

Gitは多くの開発現場で使われているバージョン管理システムで、その開発の履歴を確認する時のコマンドとしてgit log が使用されています。しかし、特定の用途ではgit shortlog の方がより簡単に目的を達成できるケースがあります。

この解説記事では、git shortlog ついて、git log との違いにもフォーカスを当てて説明していきます。

この記事で学べること

  • git logの概要と活用方法
  • git shortlogの概要やユースケースとgit logとの違い
  • git shortlogの実際の活用方法と応用的な使い方

そもそもgit logとは?

git logの概要

git log は、Gitリポジトリのコミット履歴を表示するためのコマンドです。指定したブランチ、もしくはHEADが指すコミットから親コミットを遡って、各コミットの情報(コミットハッシュ、作者、日付、コミットメッセージなど)が表示されます。そのためgit log は、プロジェクトの変更履歴を追跡したり、特定のコミットの詳細を確認したりする際に使用します。

$ git log

commit 2409dadee35624888781b9f146e75823a971b516 (origin/feature)
Author: Risa
Date:   Tue Feb 20 23:17:59 2024 +0900

    [add]メール送信機能を追加

commit 0cbdfb377cb109326388bb74e72075197d7c4292
Author: Fred
Date:   Tue Feb 20 23:03:56 2024 +0900

    [mod]設定値の変更

commit e78ac956a6303545b07886d356462ada0088d16c
Author: Risa
Date:   Tue Feb 20 23:01:55 2024 +0900

    [add]ユーザー機能を追加

git logのオプションと応用的な使い方

git log は以下のような応用的な使い方ができます

  • git log --oneline:各コミットを一行で簡潔に表示します。
  • git log --graph:ブランチとマージの履歴をASCIIアートのグラフで表示します。
  • git log --since="2 weeks ago":revision-range(後に説明)を使用して、特定の期間に行われたコミットを表示します。
  • git log -S "specified_code":特定の文字列やコードが追加または削除されたコミットを検索します。正規表現をサポートしているため、柔軟な検索ができます。
  • git log --author “name(もしくはemail)” 指定したコミッターのコミットのみを表示します。こちらも正規表現をサポートしています。

git shortlogとは?

git shortlogの概要

git log について改めて理解したところで、git shortlog の使い方について学んでいきましょう。git shortlog とは、そのリポジトリへ誰がどれくらいコミットしたのかが簡単にわかるようになるコマンドです。git log ではコミットしたのが誰かはAuthorとしては表示されますが、誰がどれくらいコミットしたのかを簡単に表示することはできませんでした。git logがそのリポジトリの履歴の詳細を見るためのコマンドなのに対し、 git shortlogは、「誰が」、「どんなコミット」を、「どれくらい」したかが一目でわかります。そのため、特にチームメンバーの貢献度を概観するのに適しています。

なぜgit shortlogが必要なのか

git shortlog のユースケースにはどのようなものがあるでしょうか。例えば、開発の際にプロジェクトリーダーが各メンバーの作業の進行状況やコミット数を確認したい時や、どのようなバグ修正やプログラムの変更があったのかを作業者別に調べてリリースノートにまとめるような時が挙げられるでしょう。

コマンドの活用方法

git shortlog をプロジェクトのリポジトリで実施すると、以下のようにコミッターがアルファベット順(大文字優先)で、それぞれのコミッターで分割されたコミットメッセージは過去のものが上になるように表示されます。また、名前の次に()の中で書かれた数字は、そのコミッターのコミット数を表します。

コマンドを実施する際の基本形は、git shortlog <branch/commit_id>であり、<>の箇所にブランチ名、もしくはコミットID入力することで指定したコミットまでの表示に限定することができます。省略した場合はデフォルトでHEADの指すブランチ、コミットが指定されます。また、複数のブランチやコミットを同時に指定することもできます。

$ git shortlog feature

Fred (1):
      [add]README.mdを追加する

Risa (4):
      [fix]~のバグを修正する
      [add]スキーマファイルを定義する
      [mod]README.mdに起動方法を記載する
      [fix]PRコメントの対応 〜を修正

Satoshi (2):
      [add]リポジトリ層を追加する
      [fix]~バグを修正する

ai (4):
      [mod]検索機能をリファクタリング
      [add]ユーザー認証機能をAPIに追加
      [fix]ライブラリのバージョンが古くクラッシュする問題を修正
      [improve]データベースクエリのパフォーマンスを改善

git logでの最新のコミットが一番上にあり親コミットが下に続いていた順序と逆になっています。この表示順序の違いは、git logとgit shortlogの目的の違いに由来しています。git logは時系列でのコミット追跡に重点を置いているのに対し、git shortlogはコミッターごとの活動概要の提示に重点を置いているためです。

オプション

git shortlog には以下のオプションがあります。

オプションロングバージョン説明
-n--numberedコミッターの表示順序をコミット数順に整列する
-s--summary各コミッターのコミット数のみを表示する
-e--email各コミッターの名前に加えてメールアドレスを表示する

全て同時に使用するとこのような結果になります。

$ git shortlog -ens feature

     4  Risa <risa@example.com>
     4  ai <ai@example.com>
     2  Satoshi <satoshi@example.com>
     1  Fred <fred@example.com>

応用的な使い方

時間範囲の指定

「revision-range」と呼ばれるgitコマンドに共通のオプションを用いることで、指定した時間の範囲でgit shortlog コマンドを実施することができます。その結果で誰か特定のコミッターの履歴を詳細に確認したくなったら、git logで同じように時間範囲指定をしてそのコミッターのコミットの詳細を表示しましょう。

git shortlog -ns --since="<start_date>" --until="<end_date>"
# 期間指定でコミッターとコミット数を表示
git log --author="<name>" --since="<start_date>" --until="<end_date>"
# 期間指定で特定のコミッターのコミット詳細を表示

時間指定の方法

<start_date>や<end_date>には以下の形式で時間を指定することができます。

日付形式説明
完全な日付形式
YYYY-MM-DD年-月-日2023-04-19
YYYY.MM.DD年.月.日2023.04.19
YYYY/MM/DD年/月/日2023/04/19
相対的な日付形式
<n> years agon年前1 year ago
<n> months agonヶ月前3 months ago
<n> weeks agon週間前4 weeks ago
<n> days agon日前5 days ago
<n> hours agon時間前6 hours ago
<n> minutes agon分前7 minutes ago
<n> seconds agon秒前8 seconds ago

まとめ

これらのコマンドを効果的に使い分けることで、プロジェクト管理がより効率的かつ効果的に行えるようになります。

最後に、本記事の内容をまとめます。

  • 2つのコマンドの違い

git logは対象のブランチの履歴とコミットの詳細を最新のコミットから親コミットを辿って表示するのに対し、git shortlogはコミッターごとのコミット数とその概要を表示することができます。

  • ユースケース

git shortlogはプロジェクトリーダーなどが各開発者の状況、コミット量を把握する必要がある時や、コミッターごとにコミットの内容を簡単に表示したい時に使うことができます。

  • オプションと使い方

表示順序や表示の粒度を変更するオプションがあり、revision-rangeと組み合わせることで時間範囲を指定してコマンドを実施することができます。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事