我已经查看了git-scm.com和gitref.org的相关文档,但我似乎无法弄清楚这一点。
假设我希望获得2013年11月12日星期二的所有提交。以现有的仓库为例,我知道我当天有提交,以及前一天和前一天的提交后。
2013-11-11
和2013-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-12
和2013-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"
...依此类推。我觉得我已经尝试了since
,after
,before
和until
的所有可能组合,但仍然无法找到答案,也无法理解选项是包容性的或排他性的,因为如果两个日期不同,它们似乎是包容性的,但如果它们在同一天则是排他性的。我错过了什么/我做错了什么?!
答案 0 :(得分:167)
答案是指定时间,例如git log --after="2013-11-12 00:00" --before="2013-11-12 23:59"
答案 1 :(得分:21)
我经常查看我的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 ago
,yesterday
等内容。
答案 2 :(得分:11)
接受的答案(我赞成)没有错,但是......我们来这里是为了科学!
可以使用pretty=format:<string>
placeholders扩展/自定义以下输出:
git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12
不会100%免于错误,因为用户可以输入相同的字符串。但是可以接受,具体取决于使用的占位符。例如,上面的代码段不会失败。
还可以将整个git log
解析为JSON
,并将其数据用于/操纵其心脏内容。检查https://github.com/dreamyguy/gitlogg,永远不要回头!
免责声明:这是我的一个项目。
答案 3 :(得分:7)
我为此特定目的制作了别名:
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
答案 4 :(得分:-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: