列出GIT历史记录中给定行号的所有版本

mrt*_*mrt 22 git

是否可以在Git中按行号列出文件中给定行的所有先前版本?

我觉得它有用的原因是能够根据记录的堆栈跟踪报告更轻松地解决问题.

即我undefined method exception在给定文件的第100行记录.该文件包含在大量提交中,导致给定的行可能在文件中上下移动,即使没有对其进行任何更改.

如何在最后x次提交中打印出给定文件的第100行的内容?

krl*_*mlr 9

这将调用git blame每一个有意义的修订秀行$LINE的文件$FILE:

git log --format=format:%H $FILE | xargs -L 1 git blame $FILE -L $LINE,$LINE
Run Code Online (Sandbox Code Playgroud)

像往常一样,责备显示每行开头的修订号.你可以追加

| sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

获取聚合结果,类似于更改此行的提交列表.(不完全是,如果代码只是被移动了,这可能会为该行的不同内容显示两次相同的提交ID.对于更详细的分析,您必须git blame对相邻提交的结果进行滞后比较.任何人? )


Dav*_*son 7

这不完全是你要求的,但git blame <file>你可以看到最后修改每一行的提交.

所述第一列显示了提交ID:

$ git blame my-file.txt
65126918 (David Pärsson 2013-07-22 12:53:02 +0200 1) Heading
c6e6d36d (David Pärsson 2013-07-22 12:53:10 +0200 2) =======
65126918 (David Pärsson 2013-07-22 12:53:02 +0200 3) 
13e293e3 (David Pärsson 2013-07-22 12:49:33 +0200 4) Text on first line
8b3d2e15 (David Pärsson 2013-07-22 12:49:49 +0200 5) Text on second line
13e293e3 (David Pärsson 2013-07-22 12:49:33 +0200 6) Text on third line
Run Code Online (Sandbox Code Playgroud)

您可以通过提供修订来查看上一次修改,例如

$ git blame 8b3d2e15 my-file.txt
Run Code Online (Sandbox Code Playgroud)

您还可以使用参数选择特定行-L,如下所示:

$ git blame my-file.txt -L 4,+3
13e293e3 (David Pärsson 2013-07-22 12:49:33 +0200 4) Text on first line
8b3d2e15 (David Pärsson 2013-07-22 12:49:49 +0200 5) Text on second line
13e293e3 (David Pärsson 2013-07-22 12:49:33 +0200 6) Text on third line
Run Code Online (Sandbox Code Playgroud)

更多细节和巧妙的技巧可以在git-blame手册页上找到.

  • 不要忘记`-L100,+ 10`选项从100行指责10行,或`-L/void foo /,+ 10`指责10行定义函数foo. (3认同)