如果一行在 2 个版本之间来回修改了几次, git blame 似乎只显示该行的最新提交。
是否可以让它显示该行的所有提交?
我不知道同时显示该行上的所有提交,但您可以使用git blame SHA~ -- filename
. 对于责备的每次迭代,只需插入修改该行的下一个最近的“最新”SHA。
示例:第一次运行时,git blame foo.php
您会看到该行已被 修改f8e2e89a
,因此您退出并运行git blame f8e2e89a~ -- foo.php
git 会显示之前谁修改了该行f8e2e89a
。冲洗并根据需要重复。
的目的git blame
是显示哪个提交最近修改了特定文件中的哪些行。它没有显示同一行的多个版本的选项。
你不能用 diff 做你想做的事git blame
,但你可能会用 word-diff 算法或其他一些自定义 diff 工具来接近。特别是,您可以在日志输出中显示逐行单词差异,如下所示:
# Show deletions delimited with [- -], and additions with {+ +}.
git log --patch --word-diff=plain
根据此处已经提供的答案,我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.