查看特定行的git历史记录

问题描述 投票:0回答:4

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

git
4个回答
186
投票

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 范围的末尾搜索(如果有),否则从 文件的开头。 “^:”从文件开头搜索。


11
投票

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

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

10
投票

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

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

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

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

0
投票

使用

git log -L
意味着
--patch
,如果相关行在多次大型提交中被修改,这可能会出现问题。

要以默认日志格式显示提交,请使用

git log --no-patch LINE_NO,+1:FILEPATH
,将
LINE_NO
替换为您要跟踪的行号,并将
FILEPATH
替换为您要查找更改的文件的路径。

© www.soinside.com 2019 - 2024. All rights reserved.