有没有办法让git给你一个提交日志,只提交触及文件中的特定行?
就像git blame,但git blame会显示触及特定行的LAST commit。
我希望得到一个类似的日志,不是文件中任何地方的提交列表,而是触及特定行的提交。
有没有办法让git给你一个提交日志,只提交触及文件中的特定行?
就像git blame,但git blame会显示触及特定行的LAST commit。
我希望得到一个类似的日志,不是文件中任何地方的提交列表,而是触及特定行的提交。
当前回答
一个非常简单的方法是使用vim-fugitive。只需在vim中打开文件,选择您感兴趣的使用V的行,然后输入
:Glog
现在您可以使用:cnext和:cprev来查看该行被修改的文件的所有修订。在任何时候,输入:Gblame以查看sha、作者和日期信息。
其他回答
简单易行的git责备命令 起止线(735,750)
L735,750(语法)
git责备-L735,750 patient.php(文件路径和名称)
一个非常简单的方法是使用vim-fugitive。只需在vim中打开文件,选择您感兴趣的使用V的行,然后输入
:Glog
现在您可以使用:cnext和:cprev来查看该行被修改的文件的所有修订。在任何时候,输入:Gblame以查看sha、作者和日期信息。
这将调用git blame为每一个有意义的修订显示line $ line文件$ file:
git log --format=format:%H $FILE | xargs -L 1 git blame $FILE -L $LINE,$LINE
像往常一样,责备在每行开头显示修订号。你可以添加
| sort | uniq -c
要获得聚合结果,可以使用更改这一行的提交列表之类的东西。(不完全是,如果代码只是被移动了,这可能会对行中不同的内容显示相同的提交ID两次。为了进行更详细的分析,您必须对相邻提交的git blame结果进行滞后比较。有人知道吗?)
简化@matt的回答-
get - l14,15——<file_path>
这里你会看到第14行到第15行。
因为-L选项需要Range作为参数,我们不能使用-L选项获得单行的责备。
参考
在我的例子中,行号随着时间的推移发生了很大的变化。 我也在git 1.8.3上,它不支持“git blame -L”中的正则表达式。 (RHEL7仍然有1.8.3)
myfile=haproxy.cfg
git rev-list HEAD -- $myfile | while read i
do
git diff -U0 ${i}^ $i $myfile | sed "s/^/$i /"
done | grep "<sometext>"
Oneliner:
myfile=<myfile> ; git rev-list HEAD -- $myfile | while read i; do git diff -U0 ${i}^ $i $myfile | sed "s/^/$i /"; done | grep "<sometext>"
当然,这可以被做成一个脚本或一个函数。