LINEで現役エンジニアに直接質問してみよう!登録無料

git logで特定の期間だけ出力する時に使えるフォーマット一覧をまとめてみた

git logには期間を絞ってログを出力するために、--after --since --before --until の4種類のオプションを備えています。 しかし、そのオプションに指定する日付のフォーマットに関して、詳しい情報が殆どありません。

ですので、ここで使えるフォーマットについてまとめたいと思います。

git logで使えるフォーマット一覧

結論から言うと、git logで使えるフォーマットには下記の種類があります。

  • relative
    • 例: 37 minutes ago
  • iso8601
    • 例: 2019-09-08 00:06:34 +0000
  • iso8601-strict
    • 例: 2019-09-08T00:06:34+00:00
  • rfc2822
    • 例: Sun, 8 Sep 2019 00:06:34 +0000
  • short
    • 例: 2019-09-07
  • local
    • 例: Sun Sep 8 00:06:34 2019
  • default
    • 例: Sun Sep 8 00:06:34 2019 +0000
  • unix
    • 例: 1567901194

relative フォーマット

今の時間を基準にして相対的に時間を指定する方法です。

  • 40 minutes ago
  • 8 hours ago
  • 2 weeks ago
  • 3 months ago
  • 1 year, 2 months ago

iso8601 フォーマット

国際標準化機構が定めた日付のフォーマットです。最後の時差表現を省略した場合は協定世界時(UTC)が指定されたものとなります。

  • 2019-09-08 00:06:34 +0000
  • 2019-09-07 15:45:28 +0900
  • 2019-09-08 00:06:34

iso8601-strict フォーマット

国際標準化機構が定めた日付のフォーマットです。最後の時差表現を省略した場合は協定世界時(UTC)が指定されたものとなります。 上記のiso8601よりも、より厳格なフォーマットとして定義されています。

しかし、元々gitでは解析(parse)出来なかった日付表現は無視されるようになっているので、どこが厳格なのかよくわかりませんでした。解析(parse)エラーが出力されるわけでも無いですし、、、

iso8601フォーマットが2種類あるんだなぐらいにおもっておけばOKです。

  • 2019-09-08T00:06:34+00:00
  • 2019-09-08T00:06:34+09:00
  • 2019-09-08T00:06:34

short フォーマット

年月日をを表現するフォーマットです。

  • 2019-09-08
  • 2019-01-01
  • 2009-01-01

rfc2822 フォーマット

RFCとは、インターネット上で有志によって運営されている個人、団体など様々な人によってまとめられ、世界に公開されている文章やそれを議論するネットワークのことです。 そこで決められた文章の中に、「rfc2822」という名前で管理されたものがあります。中身は、電子メールをどのように定義しているのかが書かれています。その内容の一部に日付に関するフォーマットの記述があり、それがgitの日付表現で使われています。

gitでは独自の実装により、日時が省略された場合には、「00:00:00」指定されたものと同等の挙動をします。

  • Sun, 8 Sep 2019 00:06:34 +0000
  • Thu, 5 Sep 2019 19:35:39 +0900
  • Sun, 8 Sep 2019 00:06:34
  • Sun, 8 Sep 2019

local フォーマット

これがどこで標準化されているフォーマットなのかは見つけることが出来ませんでしたが、git内部では「default-local」という名前でも使われているようです(参考)。

  • Sun Sep 8 00:06:34 2019
  • Mon Jul 3 23:18:43 2006
  • Mon Jul 3 23:18:45 2006

default フォーマット

git logを使った時に、デフォルトで使われる日付表現です。

  • Sun Sep 8 00:06:34 2019 +0000
  • Thu Sep 5 19:35:39 2019 +0900

unix フォーマット

協定世界時(UTC)での経過秒数であるuniximeとを使って指定します。

  • 1567901194
  • 1567679739

日付指定には使えない「raw」フォーマット

rawフォーマットは、協定世界時(UTC)での経過秒数であるuniximeと、pcのlocal情報を使った時差情報を同時に表現したフォーマットです。 unixtimeにはそもそも「協定世界時(UTC)での」という時差情報が含まれているのに、さらに「pcのlocal情報を使った時差情報」をすることは出来ません。

あくまで、git内部で時差を処理するための日付の記録方法として2つの時差情報を登録しているのです。

ちなみに、rawフォーマットは下記のようになります。

  • 1567679739 +0000
  • 1567679739 +0900

「1567679739 +0900」は、「2019-09-05 19:35:39 +0900にコミットがなされた」という意味になります。

どうやって使えるフォーマットを調べたのか?

使えるフォーマットは、ソースコードを確認し、使えそうなフォーマットを1つずつ検証していく方法で調べました。

日付のフォーマットといえば、「ISO8601」が有名です。ISOとは、国際標準化機構のことで、そこで決められた「決まり」がISOシリーズとしてまとめれられています。 git logでは、この形式の則った日付表現は使えることがわかっていたので、この名前を足がかりとしてソースコードの全文検索を行いました。

すると、「検索結果」より、「git-completion.bash」というファイルに行き着き、そこで使える日付フォーマットには下記の種類があることがわかりました。

  • relative
  • iso8601
  • iso8601-strict
  • rfc2822
  • short
  • local
  • default
  • raw
  • unix
この記事を書いた人

自身がプログラミングを独学で勉強し始めて躓いた経験を元に、これから勉強をする人に向けに「イラスト多めでわかりやすい記事」にこだわって情報を発信しています。

現在はフルスタックエンジニアとしてサービス開発などのお仕事をしています。