git责备多次修改一行?

时间:2012-06-14 06:19:41

标签: git blame

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

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

5 个答案:

答案 0 :(得分:11)

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

示例:第一次运行git blame foo.php时,您看到该行已被f8e2e89a修改,因此您退出并运行git blame f8e2e89a~ -- foo.php,然后git会显示修改了该行的人在f8e2e89a之前。必要时冲洗并重复。

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

另请参阅

Extract authorship information from git repository

答案 4 :(得分:0)

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

#!/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

然后我可以致电git rblame -L xxx,yyy myfilename,我将获得相应内容的完整历史记录。鉴于行号可能会发生变化,一个有意义的正则表达似乎更好。