【发布时间】:2023-03-03 11:58:02
【问题描述】:
如果一行在两个版本之间来回修改了几次, git blame 似乎只显示该行的最新提交。
是否可以让它显示该行的所有提交?
【问题讨论】:
-
见stackoverflow.com/questions/8435343/…。它是可行的,而且很容易。
如果一行在两个版本之间来回修改了几次, git blame 似乎只显示该行的最新提交。
是否可以让它显示该行的所有提交?
【问题讨论】:
根据此处已经提供的答案,我在我的 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,我会得到文件的完整历史记录和给定的内容。鉴于行号可能会改变,有意义的正则表达式似乎效果更好。
【讨论】:
git blame 自己不能这样做(但请参阅下面的解决方法)。
但是git gui 有一个责备模式,可以让您深入了解提交。
安装后使用git gui blame <filename> 调用它。
【讨论】:
我不知道如何同时显示该行上的所有提交,但您可以使用git blame SHA~ -- filename“钻取”对该行的每个更改。每次迭代责备时,只需插入修改该行的下一个最近的“最新”SHA。
示例:第一次运行git blame foo.php 时,您看到该行已被f8e2e89a 修改,因此您退出并运行git blame f8e2e89a~ -- foo.php,然后git 将显示谁修改了f8e2e89a 之前的行。冲洗并根据需要重复。
【讨论】:
你不能用git blame 做你想做的事,但你可能会用单词差异算法或其他一些自定义差异工具来接近。特别是,您可以在日志输出中显示逐行单词差异,如下所示:
# Show deletions delimited with [- -], and additions with {+ +}.
git log --patch --word-diff=plain
【讨论】:
git blame 的目的是显示哪个提交最近修改了特定文件中的哪些行。它没有显示同一行的多个版本的选项。
【讨论】:
git blame HEAD~n -- filename 来模拟,其中 n 从 0 开始并增加。这不是交互式的,但每次增加数字时,您都会回顾历史。