在其他提交中,我有一个日期为2017-12-22( 4b9273bda1680867 )。但是当我运行git log --before '2017-12-28 00:00'
时,我得到的最新结果是2017-12-19(这是 599241c3003 的父母之一)。
我怀疑这是由 4b9273bda1680 引起的,其祖先比查询日期更新( 599241c3003 ),但我找不到任何描述此行为的文档。
* commit 1a5b54d74c6130fae9806a8716744801e2152270 (HEAD -> _)
|\ Merge: 599241c 872e57d
| | Date: Thu Dec 28 11:01:53 2017 +0100
| |
| * commit 872e57d860aa4323b394cd63cc050d4746600d93
| | Date: Thu Dec 28 10:58:43 2017 +0100
| |
| * commit 648833bd98e724e53697e2a4c2b765a1c23360ee
| | Date: Wed Dec 27 09:03:52 2017 +0100
| |
| * commit 4b9273bda16808672d6a484c5ddf7ba7e4b6a4be
|/ Date: Fri Dec 22 17:41:21 2017 +0100
|
* commit 599241c3003e848fefc7316dbff6b64e75fbd744
|\ Merge: 42507fd 069a9d3
| | Date: Thu Dec 28 11:00:45 2017 +0100
答案 0 :(得分:0)
正如@RaymondChen和@torek提到的那样,提交有两个与之关联的日期。 "作者" date标识了您第一次运行git commit
的那一刻以及" commit" date timestamps任何重新提交的提交(例如--amend
s,rebase
,...)。您可以在MicrosoftDocs#git-dates了解更多相关信息。
git log -1 --pretty=fuller 4b927
的输出:
commit 4b9273bda16808672d6a484c5ddf7ba7e4b6a4be
...
AuthorDate: Fri Dec 22 17:41:21 2017 +0100
...
CommitDate: Thu Dec 28 11:01:29 2017 +0100
同样根据Git log: filter by commit's author date git log
,我们不允许按作者的日期进行过滤(即使它是输出中的默认值)。根据作者的日期过滤的唯一方法是使用一些脚本魔术。
我的bash实现:
# git-author-date-before()
# ------------------------
# args:
# $1 - unix timestamp for limiting date
# $@ - any additional arguments will be passed to `git show`.
# example usages:
#
# git-author-date-before 1514415600
# git-author-date-before $(date -j -f '%Y %m %d %H %M %S' '2017 12 23 00 00 00' '+%s') --pretty=fuller
#
function git-author-date-before() {
END_TIMESTAMP="$1"; shift;
git log --format="%at %H" \
| sort -r \
| awk -v t1=$END_TIMESTAMP '$1 <= t1 { print; }' \
| cut -d ' ' -f 2 \
| xargs git show "$@"
}
请注意上面的示例已经在OSX上测试过,它使用的BSD date
实用程序与您通常在Linux系统上找到的GNU date
不兼容。