我已经从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的组合,但仍然找不到答案,我也不知道这些选择是包容的还是排外的,因为如果两个日期不同,它们似乎是包容的,但如果它们是同一天,它们就是排外的。我错过什么了吗/我做错了什么?
公认的答案没有错(我投了赞),但是……我们是为了科学而来!
下面的输出可以使用pretty=format进行扩展/自定义:
git log --pretty='format:%H %an %ae %ai' | grep 2013-11-12
不能100%避免错误,因为用户可能输入相同的字符串。但这取决于使用的是哪种占位符。例如,上面的代码片段不会失败。
人们也可以将整个git日志解析为JSON,并根据自己的意愿消费/操作其数据。访问https://github.com/dreamyguy/gitlogg,永远不要回头!
免责声明:这是我的一个项目。
这个脚本显示当前repo的可用提交日期范围,然后提示输入您想要查看的提交日期。它显示一个短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: