特定の日のすべてのコミットを表示するにはどうすればよいですか?


188

git-scm.comgitref.orgから関連するドキュメントをすでに見ましたが、これを理解することができないようです。

2013年11月12日火曜日のすべてのコミットを取得するとします。既存のリポジトリを例として使用すると、その日にコミットされていることと、前日と翌日にコミットされていることがわかります。

2013-11-112013-11-12

次のすべては、11月11日と12日の両方のコミットを提供します。

  • git log --after="2013-11-11" --until="2013-11-12"
  • git log --since="2013-11-11" --until="2013-11-12"
  • git log --after="2013-11-11" --before="2013-11-12"
  • git log --since="2013-11-11" --before="2013-11-12"

2013-11-12だけ

次のすべては私にコミットを与えません:

  • git log --since="2013-11-12" --until="2013-11-12"
  • git log --since="2013-11-12" --before="2013-11-12"
  • git log --after="2013-11-12" --until="2013-11-12"
  • git log --after="2013-11-12" --before="2013-11-12"

2013-11-122013-11-13

(の結果から予想されるように2013-11-11し、2013-11-12上記)、以下のすべては、私は両方の11月12日と13日の結果で与えます:

  • git log --since="2013-11-12" --before="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"
  • git log --since="2013-11-12" --until="2013-11-13"
  • git log --after="2013-11-12" --before="2013-11-13"

...などなど。私は私がすべての可能な組み合わせを試してみたように感じsinceafterbefore、とuntil彼らは二つの日付が異なる場合包括的であるように見えるので、まだ、答えを見つけることができない、また私は、これらのオプションは、包括的または排他的であるかどうかを理解しますが、彼らが同じ日にいる場合は排他的です。私は何かを見逃しましたか/何が間違っていますか?!


8
私は非常に奇妙な自分を処理するためのgitのsince / after / until / beforeを見つけたので、答えはわかりませんが、日付と時刻を指定してみましたか(例--since = "2013-11-12 00:00 「)?また、あなたのコミット(のいずれか)は、コミッターと著者の日付が異なりますか?
John Bartholomew

了解しました!時間の指定はうまくいきました。時間をかけて試してみることは、私にも起こりませんでした。ありがとう!コミッターと作者の日付については、それらの日付の間にパッチは適用されていなかったので、そうではありませんでした。
3cheesewheel 2013年

「git log --boundary」がこれを行うはずなので、「git log --boundary --after = "2013-11-12" --before = "2013-11-12"」が表示されるように思えます正確に1つのコミット(あなたがそれをすると思うもの:))。
qneill 2016

回答:


231

ジョン・バーソロミューに感謝!

答えは時間を指定することです、例えば git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"


12
いいね。ただし、このコマンドでは、翌日の23:59から00:00までのコミットが省略されるためgit log --after="2013-11-12 00:00" --before="2013-11-13 00:00"、より良いコマンドです。私は信じてgitk --since="2013-11-12 00:00" --until="2013-11-13 00:00" &あなたがgitkがインストールされている場合も動作します。
HelloGoodbye 2016年

6
git 2.13.0で。git log --after="2017-07-25" --before="2017-07-26"私にとって有効な結果が得られます。
powlo 2017

1
これは現在チェックアウトされているブランチ用ですか?すべてのブランチで見る方法は?
nawfal

これは正解ですが、私はまだそれに困惑し、このフォローアップの質問を掲載しています:stackoverflow.com/questions/59691065/...
bgoodr

28

私は通常、gitログをチェックして、特定の日に何をしていたかを確認し、それに基づいてタイムシートを更新しますが、ISO形式で完全な日付を入力するのは面倒なので、次のようにします

git log --after=jun9 --before=jun10

そして--author、私は自分のコミットのみを印刷するように追加します

git log --since=jun9 --until=jun10 --author=Robert 

これは、6月の最後の9日に発生したコミットを出力します(この場合、2016の場合、2015や2014などではありません)。

パラメータも同じようなものを取ることができ、など、--since/--after--until/--before3 days agoyesterday


単に機能せず、何も出力しません。何か不足していますか?ブランチを指定する必要がありますか?
Aurimas

1
@オーリマスまあ、あなたの側で何がうまくいかなかったかわからない。あなたの場合sinceuntil値が正しくない、あなたは確かに何も出力というのを取得していないでしょう。git log最初に使用しsinceuntil表示に基づいてと値を選択してみてください。ブランチや特別なものは必要ありません。この機能がどのGitバージョンで利用できるか不明です。また、最新バージョンを使用していることを確認してください。
Kohányiロバート

6
私はスペースを使用しなければなりませんでした:git log --after="may 2" --before="may 3"
Connor Clark

15

受け入れられた答え(私が賛成した)に問題はありませんが、...私たちは科学のためにここにいます!

以下の出力は、pretty=format:<string> プレースホルダーを使用して拡張/カスタマイズできます。

git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12

同じ文字列がユーザーによって入力された可能性があるため、エラーに対する100%耐性はありません。ただし、使用されるプレースホルダーに応じて許容されます。たとえば、上記のスニペットは失敗しません。

全体git logを解析してJSONそのデータを消費/操作して、心臓のコンテンツにすることもできます。https://github.com/dreamyguy/gitloggをチェックして、決して振り返らないでください!

免責事項:それは私のプロジェクトの一つです。


10

その特定の目的のためにgitエイリアスを作成しました:

commitsAtDate = "!f() { git log --pretty='format:%C(yellow)%h %G? %ad%Cred%d %Creset%s%C(cyan) [%cn]' --decorate --after=\"$1 0:00\" --before=\"$1 23:59\" --author \"`git config user.name`\"; }; f"

使用法:

git commitsAtDate 2017-08-18

1
あなたも、このエイリアスにすなわち相対日付を指定することができgit commitsAtDate yesterday2 days agoなど
voiger

-2

このスクリプトは、現在のリポジトリで使用可能なコミットの日付範囲を表示してから、コミットを表示する日付の入力を求めます。短いSHAと完全なSHA、作成者、コミットタイムスタンプ、コメントを一重引用符で囲んで表示します。

EnterキーまたはControl-Dキーを押すまで、スクリプトは日付の入力を求め続けます。

Macユーザー:GNU日付が必要です。

#!/bin/bash

COMMITS=`git log --abbrev-commit --pretty="format:%h %H %ai" | sort -k3 -k4`
FIRST=`echo "$COMMITS" | head -n 1`
LAST=`echo "$COMMITS" | tail -n 1`
echo "First commit: $FIRST"
echo "Last commit: $LAST"
printf "Date to search for commits: "
read DATE
while [[ "$DATE" ]]; do
  NEXT_DATE=`date +%Y-%m-%d -d "$DATE +1 day"`
  #echo "Searching for commits from $DATE to $NEXT_DATE"
  echo `git log --after="$DATE" --before="$NEXT_DATE" --pretty="format:%h %H %an %ci '%s'"`
  printf "\nDate to search for commits: "
  read DATE
done

私はスクリプトを呼び出しましたcommitsOnDates、そしてここでそれは動作しています。最初に入力した日付にはコミットがないため、応答は空の行です。

$ commitsOnDates
First commit: 375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f 2015-08-03 13:37:16 -0700
Last commit: 1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 2018-10-13 21:32:27 -0700
Date to search for commits: 2015-08-13


Date to search for commits: 2015-08-03
375bcfb 375bcfbbf548134a4e34c36e3f28d87c53b2445f Mike Slinn 2015-08-03 13:37:16 -0700 'this is a comment'

Date to search for commits: 2018-10-13
1d4c88c 1d4c88ce6a15efaceda1d653eed3346fcae8f5e6 Mike Slinn 2018-10-13 21:32:27 -0700 'a comment' 64d6e16 64d6e16338657b82c91ac94bea8ebf7b80dc4c28 Mike Slinn 2018-10-13 18:28:41 -0700 'nother comment' d5eb26e d5eb26e49fc9dceee9b9f5a2d8fa052bff2cfbbc Mike Slinn 2018-10-13 18:16:20 -0700 'no comment' d8a4992 d8a4992df208ba5efb50728311820bdad5ba5332 Mike Slinn 2018-10-13 12:02:00 -0700 'commented'

Date to search for commits:
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.