是否有可能看到谁在git blame报告的提交之前编辑了特定的行,就像一个给定行的提交历史?
例如,我运行以下(在优秀的uncrustify项目上):
$ git blame -L10,+1 src/options.cpp
^fe25b6d (Ben Gardner 2009-10-17 13:13:55 -0500 10) #include "prototypes.h"
我如何才能找到谁在提交fe25b6d之前编辑了这一行?在提交之前是谁编辑的?
是否有可能看到谁在git blame报告的提交之前编辑了特定的行,就像一个给定行的提交历史?
例如,我运行以下(在优秀的uncrustify项目上):
$ git blame -L10,+1 src/options.cpp
^fe25b6d (Ben Gardner 2009-10-17 13:13:55 -0500 10) #include "prototypes.h"
我如何才能找到谁在提交fe25b6d之前编辑了这一行?在提交之前是谁编辑的?
当前回答
如果你正在使用JetBrains Idea IDE(和衍生品),你可以选择几行,右键单击上下文菜单,然后Git ->显示历史选择。你将看到影响选定行的提交列表:
其他回答
基于DavidN的回答,我想遵循重命名的文件:
LINE=8 FILE=Info.plist; for commit in $(git log --format='%h%%' --name-only --follow -- $FILE | xargs echo | perl -pe 's/\%\s/,/g'); do hash=$(echo $commit | cut -f1 -d ','); fileMayRenamed=$(echo $commit | cut -f2 -d ','); git blame -n -L$LINE,+1 $hash -- $fileMayRenamed; done | sed '$!N; /^\(.*\)\n\1$/!P; D'
参考:很好地显示文件重命名历史在git日志
安布尔的回答是正确的,但我觉得不清楚;语法为:
git blame {commit_id} -- {path/to/file}
注意:——用于将树状sha1与相对文件路径分开。1
例如:
git blame master -- index.html
这一切都要归功于安布尔!:)
我写了一个ublame python工具,它可以返回影响给定搜索词的文件提交的简单历史,你可以在þroject页面上找到更多信息。
对于这个问题,一个非常独特的解决方案是使用git log,正如Andre在这里解释的那样:
git log -p -M——follow——stat——path/to/your/file
在前面的回答的基础上,这个bash一行代码应该可以提供您所要查找的内容。它显示了特定文件的特定行,通过最近5个修订的git责备历史:
LINE=10 FILE=src/options.cpp REVS=5; for commit in $(git rev-list -n $REVS HEAD $FILE); do git blame -n -L$LINE,+1 $commit -- $FILE; done
在这个命令的输出中,对于特定的提交,您可能会看到行内容发生变化,或者显示的行号甚至可能发生变化。
这通常表明这一行是在特定的提交之后第一次添加的。它还可以指示该行从文件的另一部分移动。