【问题标题】:Find commit that deleted a line between two revision查找删除了两个修订之间的一行的提交
【发布时间】:2018-03-13 22:17:56
【问题描述】:

我正在尝试查找删除两个修订之间的一条线的提交。直接没找到。

这是我在以下尝试的:

git blame $v1..$v2 -L $line,+1 --reverse -- $file_name

然后这个命令行返回被删除的行而不是有问题的提交。我使用这些方法搜索这个字符串:

1- 搜索修改了该行所在函数的提交。

git show $commit:$file | grep -Fq "$st"

2- 使用字符串搜索。

git log $v1...$v2 --pretty=format:"%h"  -S"$String" $file

首先,在某些情况下,我找不到包含该行的函数(或者它不存在)。在第二种方法中,字符串可能会在几种情况下重复,我需要查看所有情况。

我需要一种更好的方法来找到删除该行的提交。

【问题讨论】:

  • git log -G 我相信这就是你要找的:)
  • 但这仍然是同样的问题,因为“git log -G”将返回具有类似字符串修改的提交。我可以有几个提交作为回报(相同的字符串,例如(“return 0”))......
  • 对不起,但没有帮助,我应用了大多数关于这个问题的回复中的策略......

标签: git diff blame


【解决方案1】:

我通常使用pickaxe search

git log -SFoo -- path_containing_change 

列出了引入字符串 Foo 的提交,以及 Foo 被删除的提交。
是的,使用这种方法,您需要查看这些提交以确定添加或删除哪个提交 Foo

【讨论】:

  • 这里的问题是,当我们只有 Foo="return 0" 时,我们会收到很多没有真正包含在我们预期中的变化的响应。
  • @AmineBarrak 即使仅限于特定文件?
  • 是的,确定一个文件中有几个“return 0”。让我们说在很多情况下。这不是一个具体的解决方案
  • @AmineBarrak 如果您将其限制为文件中的 函数?那行得通吗?见git-scm.com/docs/git-log#git-log--Lltstartgtltendgtltfilegt
  • 我已经完成了那部分,在我搜索提交的第一步
猜你喜欢
  • 2013-09-10
  • 2015-01-23
  • 2016-04-29
  • 2012-09-17
  • 2016-12-23
  • 2015-12-14
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多