如果每一行都归因于最新的提交,这意味着每一行实际上都在最新的提交中被触及。
通常,当有人将每一行从单个换行符更改为 CR/LF 对时,就会发生这种情况,反之亦然。
啊哈,如果没有 ,上述内容将是正确的-S
,但是-S
对于 ,意味着git blame
将移植物插入提交图中。
这是一个旨在与 cvsserver 一起使用的特殊功能(根据评论),但它不适用于您使用它的方式。
格式只是一系列的<commit-ID> <parent-ID> ...\n
行。因为,在这种情况下,您希望在 开始并git blame
在HEAD
停止HEAD~50
,我们可以这样做:
git rev-parse HEAD~50 | git blame -S /dev/stdin $file
输出 commit的git rev-parse
SHA-1 HEAD~50
,没有额外的行,这使得该提交没有父提交,这使得git blame
在该点停止历史遍历。
(您用来提供-S
输入的命令git rev-list HEAD~50 HEAD
,列出了从或从可访问的每个提交,作为单个提交 ID,省略了父项。这与, 因为它本身可以从 访问。因为这列出了没有父项的每个提交IDs,这使得每个提交都被视为根提交。然后它从提交开始,试图找到它的父母,被认为是根提交,然后停在那里——这使得该提交对每个源代码行负责。换句话说,通过列出提交 ID,您必须停在那里。这就是我们想要列出的原因,而不是。)HEAD~50
HEAD
git rev-list HEAD
HEAD~50
HEAD
git blame
HEAD
HEAD
HEAD
git blame
HEAD~50