如果一行在两个版本之间来回修改几次, git blame似乎只显示该行的最新提交。
是否可以让它显示该行的所有提交?
答案 0 :(得分:11)
我不知道同时显示该行上的所有提交,但您可以使用git blame SHA~ -- filename
“钻取”每行的更改。对于责备的每次迭代,只需插入修改该行的下一个“最近”的SHA。
示例:第一次运行git blame foo.php
时,您看到该行已被f8e2e89a
修改,因此您退出并运行git blame f8e2e89a~ -- foo.php
,然后git会显示修改了该行的人在f8e2e89a
之前。必要时冲洗并重复。
答案 1 :(得分:9)
答案 2 :(得分:1)
git blame
的目的是显示哪个提交最近修改了特定文件中的哪些行。它没有显示同一行的多个版本的选项。
答案 3 :(得分:1)
你不能用git blame
做你想做的事,但你可能会接近使用word-diff算法或其他一些自定义差异工具。特别是,您可以在日志输出中显示逐行字diff,如下所示:
# Show deletions delimited with [- -], and additions with {+ +}.
git log --patch --word-diff=plain
答案 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
,我将获得相应内容的完整历史记录。鉴于行号可能会发生变化,一个有意义的正则表达似乎更好。