找出文件中某一行的所有GIT更改

rub*_*o77 2 git

我有一行最近更改为非工作状态的代码.

如何找出哪个和哪个提交改变了这个特定的行?

我试过了

git log -some_distinct_string_from_that_line --pretty=format:'%h %an -- %s -- %ad'
Run Code Online (Sandbox Code Playgroud)

这显示所有提交注释和作者的提交更改了包含"one_distinct_string_from_that_line"的行的任何内容,但是如何查看他们所做的实际更改?

编辑:
我也安装git-gui并查看了该行,git gui blame filename但显示的那一行只有一个提交更改,虽然肯定有更多的更改.

我检查了图形gui smartgit来查看手动对该文件所做的所有更改,我发现了3个提交,其中该行被明确编辑(a #先被删除,然后再次添加另一个提交)

是否有另一种方法不会继续使用git blame功能,并且不会在假设中继续,该行是在commit-diff中?

pat*_*yts 6

git blame.-L选项需要一系列行,您可以选择一个文件作为git log.因此git blame -L 10,20 -- my/file.txt将显示触及该文件中每一行的最新git提交.git gui blame my/file.txt做同样的工作,但有一个用户界面,让您及时浏览.


Jos*_*uss 5

您可以在以下部分的.git/config文件中添加以下行[alias]:

findchange = !sh -c \"git log --pretty=format:'COMMIT %C(yellow)%h %an -- %s -- %ad%C(reset)' -G'$1' -p --word-diff-regex='[A-Za-z0-9]+|[^A-Za-z0-9]|$1' --color=always ${@:2} | egrep '$1|^COMMIT|-{3} a\\/|\\+{3} b\\/' \"

然后,只需在命令行执行以下命令:

git findchange 'yourText'
Run Code Online (Sandbox Code Playgroud)

说明:

  • 我稍微修改了漂亮的格式,以便您可以发现每次提交的开始。
  • 使用-plog选项显示每次提交的补丁,因此显示p。
  • 使用--word-diff-regex选项定义单词。这将按行显示按整词或单个非词字符分组的更改。
    • 将搜索文本本身包含在正则表达式中;否则,它不会捕获变化跨越单词的情况
  • --color=always保留颜色,即使在管道上也是如此egrep。
  • egrep 查找以下任一行:
    • 提交消息
    • 您要搜索的文本(已删除或已添加)
    • 更改文件的原始名称
    • 更改文件的新名称