5

Git给出了since选项

git blame --since=3.weeks -- foo

有没有办法在两个日期之间获得责任清单?
即:类似于git log --sinceand的东西--until

4

1 回答 1

2

类似于 git log since 和 until

在 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在上面的拓扑中说“”;遍历 from c9down to c5andc6只是为了找到c5c6开始“真正的”遍历 from。

现在,“ --after 2”仍将显示“ c9”,即您开始遍历的提示,这在“ blame”的上下文中很重要。

与“ git rev-list”(和“ git log”系列命令)不同,它可以在历史记录中采用多个正端点git log -p ^c1 c5 c6 -- myfile(例如,在上面的示例拓扑中询问“”是完全明智的), git blame”必须恰好给出一个正端点,因为“ git blame ^c1 c5 c6 -- myfile没有任何意义(问:“我们想知道myfileinc5吗?还是myfilein c6?”)。

于 2018-07-22T05:04:17.850 回答