查看特定行的 git 历史记录

我想查看与文件中特定行相关的提交历史记录。我知道我们能拿到文件的历史记录。是否有任何命令可用于仅对与某一特定行相关的提交进行排序?

35533 次浏览

您可以使用 git 日志 https://git-scm.com/docs/git-log

git log -L'the line from your file' -- path/to/your/file.txt

Bomz 给出了正确的选项,但是语法错误:

git log -L '/the line from your file/,+1:path/to/your/file.txt'

对于 -L,参数的含义是“在 path/to/your/file.txt中找到第一个出现的正则表达式 /the line from your file/,并显示关于从这一点开始的一行范围的日志(意思是,只有这一行,但是可以改为 + 5)”。

需要注意的是,如果该行包含在正则表达式中具有特殊含义的字符,则需要转义它们。

然而,使用行号可能要简单得多是这样的:

git log -L15,+1:'path/to/your/file.txt'

(对于文件 path/to/your/file.txt的第15行)

在这两种情况下,+1都可以替换为更大的数字以获得更多的行,或者使用正则表达式来匹配所选范围的末尾。

来自 那些文件的详细描述:

-L <start>,<end>:<file>
-L :<funcname>:<file>

中的“ < start > ,< end >”(或函数名 regex < function >)给出的行范围的演变情况 < file > 。您不能给出任何 pathspec 限制器 以步行形式进行,由一次复习开始,即只可 给出零个或一个正修正参数 选择不止一次。

< start > 和 < end > 可以采用以下形式之一:

  • 号码

    如果 < start > 或 < end > 是一个数字,它指定一个绝对行号 (行数从1开始)

  • /regex/

    此表单将使用与给定 POSIX 正则表达式匹配的第一行 < start > 是正则表达式,它将从前一个-L 的末尾开始搜索 范围,否则从文件开始 “ ^/regex/”,它将从文件的开始搜索 正则表达式,它将从 < start > .

  • 给定的行开始搜索
  • + 偏移量或-偏移量

    这只对 < end > 有效,并且在 或在 < start > .

  • 给出的行之后

如果给出“ : < funname >”来代替 < start > 和 < end > ,则它是一个 正则表达式,表示从第一个 funname 行开始的范围 与 < funname > 匹配,直到下一个 funname 行 从前一个-L 范围的末尾进行搜索(如果有的话) ,否则从 “ ^ : < funname >”从文件开始搜索。

这里的其他答案很好地涵盖了提出的问题,但是有时您希望在不首先检查该分支的情况下查看另一个分支的历史记录。

git log branch-name -L '/regex/',+1:path/to/your/file.txt

对这些情况非常有效。或者你已经知道行号:

git log branch-name -'L15,+1':'path/to/your/file.txt'