我想查看与文件中特定行相关的提交历史记录。我知道我们可以获取文件的历史记录。是否有任何命令可用于仅对与某一特定行相关的提交进行排序?
bomz 给出了正确的选项,但语法错误。固定线路看起来像这样:
git log -L '/the line from your file/,+1:path/to/your/file.txt'
-L
的参数含义是“在/the line from your file/
中查找正则表达式path/to/your/file.txt
的第一次出现,并显示关于从这一点开始的一行范围的日志(意思是,只是这一行,但你可以说+5相反)”。
需要注意的是,如果该行包含在正则表达式中具有特殊含义的字符,则需要对它们进行转义。
但是,使用行号可能要简单得多,如下所示:
git log -L15,+1:'path/to/your/file.txt'
(文件第 15 行
path/to/your/file.txt
)
在这两种情况下,
+1
都可以替换为更大的数字以获得更多行,或者替换为正则表达式以匹配所选范围的末尾。
来自文档的详细描述:
-L <start>,<end>:<file> -L :<funcname>:<file>
追踪由“
, ”(或函数名称正则表达式 )给出的行范围的演变 。您不能给出任何路径规范限制器。这是目前 仅限于从单个修订开始的步行,即,您只能 给出零个或一个肯定的修改参数。你可以指定这个 不止一次选择。
和 可以采用以下形式之一:
数字
如果
或 是数字,则指定绝对行号 (行数从 1 开始)。 - 给出的行开始搜索
/正则表达式/
此表单将使用与给定 POSIX 正则表达式匹配的第一行。如果
是一个正则表达式,它会从前一个 -L 的末尾开始搜索 范围(如果有),否则从文件开头开始。如果 是 “^/regex/”,将从文件开头开始搜索。如果 是一个 正则表达式,它将从 . - 给出的行之后
+偏移量或-偏移量
这仅对
有效,并将指定之前的行数 或在 . 如果用“:
”代替 和 ,则它是 表示从第一行 funcname 开始的范围的正则表达式 匹配 ,直到下一个 funcname 行。 “: ” 从前一个 -L 范围的末尾搜索(如果有),否则从 文件的开头。 “^: ”从文件开头搜索。
您可以使用 git log https://git-scm.com/docs/git-log
git log -L'the line from your file' -- path/to/your/file.txt
这里的其他答案很好地涵盖了所提出的问题,但有时您想在不先检查该分支的情况下查看另一个分支的历史记录。
git log branch-name -L '/regex/',+1:path/to/your/file.txt
对于这些情况非常有效。或者您已经知道行号:
git log branch-name -'L15,+1':'path/to/your/file.txt'
使用
git log -L
意味着 --patch
,如果相关行在多次大型提交中被修改,这可能会出现问题。
要以默认日志格式显示提交,请使用
git log --no-patch LINE_NO,+1:FILEPATH
,将 LINE_NO
替换为您要跟踪的行号,并将 FILEPATH
替换为您要查找更改的文件的路径。