15

如果一行在 2 个版本之间来回修改了几次, git blame 似乎只显示该行的最新提交。

是否可以让它显示该行的所有提交?

4

5 回答 5

13

我不知道同时显示该行上的所有提交,但您可以使用git blame SHA~ -- filename. 对于责备的每次迭代,只需插入修改该行的下一个最近的“最新”SHA。

示例:第一次运行时,git blame foo.php您会看到该行已被 修改f8e2e89a,因此您退出并运行git blame f8e2e89a~ -- foo.phpgit 会显示之前谁修改了该行f8e2e89a。冲洗并根据需要重复。

于 2013-08-13T16:45:24.017 回答
12

git blame不能这样做(但请参阅下面的解决方法)。

但是git gui有一个责备模式,可以让您深入了解提交。

安装后调用它git gui blame <filename>

于 2012-06-14T06:33:22.180 回答
1

的目的git blame是显示哪个提交最近修改了特定文件中的哪些行。它没有显示同一行的多个版本的选项。

于 2012-06-14T06:23:50.987 回答
1

你不能用 diff 做你想做的事git blame,但你可能会用 word-diff 算法或其他一些自定义 diff 工具来接近。特别是,您可以在日志输出中显示逐行单词差异,如下所示:

# Show deletions delimited with [- -], and additions with {+ +}.
git log --patch --word-diff=plain

也可以看看

从 git 存储库中提取作者信息

于 2012-06-15T07:43:28.203 回答
0

根据此处已经提供的答案,我git-rblame在我的 PATH 中创建了一个脚本,其中包含以下内容:

#!/bin/bash

revision="HEAD"

while [ -n "${revision}" ]
do
    result=$(git blame "${revision}" "$@")
    revision="${result%% *}"
    if [[ "${revision}" != [a-z0-9]*[a-z0-9] ]]
    then
        revision=""
    else
        echo "${result}"
        revision="${revision}~"
    fi
done

Then I can call git rblame -L xxx,yyy myfilename and I'll get the full history for the file respective the content given. Given the fact that the line number might change, a meaningful regexp seems to work better.

于 2017-05-09T07:50:01.000 回答