Git 给出了 since 选项
git blame --since=3.weeks -- foo
有没有办法让我在两个日期之间获得责备列表?
也就是说:类似于git log --since
和--until
的东西.
类似于 git log 自和直到
这在2017年在这里讨论过。
首先,git blame
采用馈送到git rev-list
的选项,以限制 将提交考虑在内进行指责。
git rev-list
确实有:
-until=<date>
--before=<date>
显示早于特定日期的提交。
所以这些选项没有记录在git blame
下,而是git rev-list
.
但是:上述选项被git blame
忽略了。
即,git blame --since=3.weeks --before=2.weeks -- foo
不会"出错",但是...会默默地忽略--before=2.weeks
部分。
Junio C Hamano评论(谈到提交,但这也适用于日期):
rev-list
采用的许多选项被解析,但随后被blame
忽略,仅仅是因为它们在命令的上下文中没有多大意义,而"--before
"就是其中之一。有趣的是,"
--since
"(及其同义词"--after
")确实有意义,不像"--before
"(及其同义词"--until
")则没有意义。让我们想象这样的历史(时间从左到右流动):
--c1--c2--c4--c6--c8--c9 / c3--c5--c7
其中历史记录的尖端在提交"
c9
",以及 每个提交的名称表示其时间戳。
"
git rev-list c9
"从"c9
"开始,沿着父母的链条产生c9
,c8
,c7
,c6
,...,c1
,...,...。如果添加"
--after 2
",即"git rev-list --after 2 c9
"执行与上述完全相同的遍历,但停止跟踪早于指定时间的提交父项链。如果添加"
--before 6
",即"git rev-list --before 6 c9
"执行与第一个完全相同的遍历,但不显示时间戳晚于指定时间的提交。
这就像在上面的拓扑中说"git rev-list c5 c6
";从c9
到c5
和c6
的遍历只是为了找到c5
和c6
来开始"真正的"遍历。现在,"
--after 2
"仍将显示"c9
",这是您开始遍历的提示,这在"blame
"的上下文中很重要。与"
git rev-list
"(和"git log
"系列命令不同,它可以在历史中采用多个正端点(例如,在上面的示例拓扑中询问"git log -p ^c1 c5 c6 -- myfile
"是完全明智的),"git blame
"必须只给出一个正端点,因为"git blame ^c1 c5 c6 -- myfile
"没有任何意义(问:"我们想知道c5
中的myfile
吗?还是myfile
c6
?