如何查看特定日期的所有提交?


187

我已经看过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-112013-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"

...等等等等。我觉得我已经尝试过的每一个可能的组合sinceafterbeforeuntil,但仍无法找到答案,我也不知道这些选项是否包含或排除,因为他们似乎如果这两个日期都不同的是包容性的,但如果他们在同一天,则排他。我错过了什么吗/我在做什么错?!


8
我发现git的since / after / until / before处理起来很怪异,所以我不知道答案,但是您是否尝试过指定日期和时间(例如--since =“ 2013-11-12 00:00 ”)?另外,(任何)提交中的提交者日期和作者日期是否不同?
John Bartholomew

你说对了!指定工作时间。我什至没有想过要尝试一下。谢谢!至于提交者与作者的日期-在这些日期中没有应用补丁,不是吗。
3cheesewheel,

在我看来,'git log --boundary'应该为您执行此操作,以便'git log --boundary --after =“ 2013-11-12” --before =“ 2013-11-12”“显示恰好是一次提交(您认为会的一次:))。
qneill

Answers:


230

感谢约翰·巴塞洛缪(John Bartholomew)!

答案是指定时间,例如 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

6
在git 2.13.0中。git log --after="2017-07-25" --before="2017-07-26"给我有效的结果。
powlo

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/--before参数也可以采取这样的东西3 days agoyesterday等等。


根本不起作用,什么也不输出。我有什么想念的吗?我应该指定一个分支吗?
Aurimas

1
@Aurimas好吧,不确定到底出了什么问题。如果您的sinceuntil值不正确,那么您肯定不会得到任何输出。git log首先使用,然后尝试根据看到的内容选择sinceuntil值。无需分支或任何特殊要求。不知道从哪个Git版本开始可以使用此功能。确保您也有最新版本。
Kohányi罗伯特·

6
我必须使用空格:git log --after="may 2" --before="may 3"
康纳·克拉克

15

接受的答案(我赞成)没有错,但是...我们在这里求学!

可以使用pretty=format:<string> 占位符扩展/定制以下输出:

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

由于用户可能输入了相同的字符串,因此并非100%不受错误影响。但是可以接受,具体取决于所使用的占位符。例如,上面的代码片段不会失败。

有人可能会以及刚刚解析整个git logJSON和消费/它的数据操纵一个人的心脏的内容。退房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:
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.