8

18 個のコミットを含むテスト リポジトリがあります。 git log | grep Date:以下を返します。

Date:   Fri Sep 20 08:04:13 2013 +0200
Date:   Fri Sep 20 08:03:28 2013 +0200
Date:   Fri Sep 20 08:02:05 2013 +0200
Date:   Thu Sep 19 09:53:10 2013 +0200
Date:   Wed Sep 18 17:04:41 2013 +0200
Date:   Wed Sep 18 17:03:36 2013 +0200
Date:   Sat Sep 14 14:42:10 2013 +0200
Date:   Wed Sep 11 10:37:25 2013 +0200
Date:   Fri Aug 30 13:59:43 2013 +0200
Date:   Fri Aug 30 13:56:35 2013 +0200
Date:   Fri Aug 30 11:30:17 2013 +0200
Date:   Thu Aug 29 13:44:28 2013 +0200
Date:   Thu Aug 29 13:34:32 2013 +0200
Date:   Wed Aug 28 14:44:03 2013 +0200
Date:   Wed Aug 28 14:32:44 2013 +0200
Date:   Tue Aug 27 16:18:53 2013 +0200
Date:   Tue Aug 27 16:16:29 2013 +0200
Date:   Tue Aug 27 15:46:04 2013 +0200

今日(20.09.2013)に発生したすべてのコミットからログを取得したいので、試してみました

git log --since=20-09-2013 | grep Date: 

私はそれで何も得ません。SOで少し検索したところ、この質問が見つかりました。コメントでは、次のように述べています

そのように思えますが、時間がない場合は、デフォルトで 1 日の最後の 1 秒になります。

オッケー、問題ないよ。試してみましょうgit log --since=19-09-2013。それが返ってくる

Date:   Fri Sep 20 08:04:13 2013 +0200
Date:   Fri Sep 20 08:03:28 2013 +0200
Date:   Fri Sep 20 08:02:05 2013 +0200
Date:   Thu Sep 19 09:53:10 2013 +0200

待って、それは奇妙に思えますよね?指定された日付の最後の 1 秒を使用することになっている場合、その日付に発生したコミットが表示されるのはなぜ09:53:10ですか? git は、2013 年 9 月 19 日以降に発生したコミットのみを表示するべきではありませんか?

しかし、待ってください、それはさらに奇妙になります!時間を追加してみましたが、その結果

git log --since=20-09-201309:00:00 
Date:   Fri Sep 20 08:04:13 2013 +0200
Date:   Fri Sep 20 08:03:28 2013 +0200
Date:   Fri Sep 20 08:02:05 2013 +0200

それはトライを行いました...ちょっと待ってください...すべてのコミットは前に行われ09:00:00ました。なぜgitはそれらを表示するのですか? 実際、私が知っている限り、私も構文エラーを起こしました! いくつか試してみましょう:

git log --since=20-09-201312:08:00 | grep Date:
Date:   Fri Sep 20 08:04:13 2013 +0200
Date:   Fri Sep 20 08:03:28 2013 +0200
Date:   Fri Sep 20 08:02:05 2013 +0200

まだ動作します...

git log --since=20-09-201312:09:00 | grep Date:
<nothing>

うーん、そこで何が起こったのですか?git は最後の 2 つの : で区切られた数字のみを使用しているようです。20.09.2013 08:00しかし、実際にコミットを探していると思われる場合、なぜ git は後に発生したコミットを表示するのでしょう20.09.201312 08:00か? これは私には意味がありません。

誰かが私にこの混乱を説明できますか? 問題を解決する解決策がないわけではありませんが、ここで何が起こっているのかを理解したい...

4

1 に答える 1

13

デフォルトでは、日付git logはデフォルトの形式で表示されます。

--date=default は、元のタイムゾーン (コミッターまたは作成者のいずれか) でタイムスタンプを表示します。

Git ヘルプ ログに基づく

--date=local は、タイムスタンプをユーザーのローカル タイムゾーンで表示します。

--date=default は、元のタイムゾーン (コミッターまたは作成者のいずれか) でタイムスタンプを表示します。

実行することをお勧めしますgit log --date=local --since=<your date>。ローカルマシンの時間ですべてのコミットを表示するはずです。

では、 についての質問に戻ります--since

に特定の時間が指定されていない場合は、このコマンドを実行した時点の--since=<date>現地時間が使用されます。

例えば、

--since "20-09-2013"

このコマンドを午前 9 時に実行すると、

--since "20-09-2013 09:00:00"

そのため、その日のいくつかのコミットは表示されません。(現在時刻を過ぎているため)

今日のすべてのコミットを検索する場合は、次を使用します

--since "20-09-2013 00:00:00"

ミステリーの話に戻ります

だから、今git log --since=19-09-2013.それが戻る

日付: 2013 年 9 月 20 日 (金) 08:04:13 +0200

日付: 2013 年 9 月 20 日 (金) 08:03:28 +0200

日付: 2013 年 9 月 20 日 (金) 08:02:05 +0200

日付: 2013 年 9 月 19 日木曜日 09:53:10 +0200

2013 年 9 月 20 日の 08:04:13 以降にこのコマンドを実行したと思います (今日から使用すると何も表示されないというヒントに基づいています)。

于 2013-09-20T07:20:22.247 に答える