Marek R's answer 的 TL;DR 版本是 @{date} 语法无法执行您想要的操作;不要尝试将其用于此目的。
evolutionxbox's comment 中的link 涉及一个相当古老的问题,其答案包含您需要的大部分内容,尽管git whatchanged 已被git log --raw 弃用。接受的答案有一个关键概念:--since(和--until,如果你愿意的话)是按日期限制提交的方法。
但您确实也指定了某个文件(使用-- <em>pathspec</em> 选项)。请注意,当将其与 git log 一起使用时,Git 将执行历史简化,这将在遍历 Git 提交图时修剪整个子图。从本质上讲,在遇到合并时,Git 将剪除任何 不 与文件当前版本匹配的合并分支,除非它占用了合并的所有分支。也就是说,假设我们有:
...--o--o--◎
\
M--o--...
/
...--o--o--●
提交◎ 和● 合并为提交M。在提交M 中,有一个名为file 的文件。该文件同时出现在◎ 和● 中。但是,◎ 中的副本完全匹配M 中的副本,而● 中的副本则不同。 git log 命令,在默认历史简化打开的情况下,将跟随此图表的 top 行并完全忽略 bottom 行。
这是因为 Git 认为您正在寻找导致您在提交 M 中看到的文件版本的提交。即:我们如何获得文件的 this 版本?我们得到它是因为提交 M完全忽略了导致出现在提交 ● 中的版本的分支,所以 git log 同样应该忽略该分支。
如果这是你想要的,那就太好了!如果没有,请务必使用额外的git log 选项来控制或破坏历史简化。 (最直接的选项是--full-history,它会按照它说的做。)