【发布时间】:2014-12-12 12:11:15
【问题描述】:
我有一行代码最近更改为非工作状态。
我如何找出谁以及在哪个提交中更改了这一特定行?
我试过了
git log -some_distinct_string_from_that_line --pretty=format:'%h %an -- %s -- %ad'
其中显示了 cmets 和作者的所有提交,这些提交更改了一行包含“one_distinct_string_from_that_line”的任何内容,但我如何才能看到他们所做的实际更改?
编辑:
我还安装了git-gui 并查看了带有git gui blame filename 的行,但显示的该行只有一个提交更改,尽管肯定有更多更改。
我检查了图形 gui smartgit 以手动查看对该文件所做的所有更改,我发现了 3 个提交,其中该行肯定被编辑(首先删除了 #,然后再次添加了另一个提交)
是否有另一种方式不中继 git blame 功能,并且不中继假设,即该行位于 commit-diff 中?
【问题讨论】:
-
为什么要排除
git blame? “[...] doesn't relay on the assumption, that the line is in the commit-diff”是什么意思?每一行都必须出现在差异中。 -
到目前为止,我能找到的唯一方法是使用图形 gui smartgit,它告诉我,几个月前该文件中还有一个变化,那就是删除了该行开头的
#。但是其他方法(使用责备)都没有向我展示特定的提交。我想也许另一种方法会让我发现变化。也许我们在这里发现了一个错误? -
可能不会。 Git blame 可以很好地找出哪个提交引入/修改了一行。 Git
blame将打印提交 ID。手动方法是将该行定位在HEAD,查找提交ID,然后使用该修订的前身执行另一个blame,例如git blame 0deadbee~1 -- <FILE>。重复此步骤。如果您在<REV>~1中找不到该行,<REV>可能是引入提交。 Git show 可以帮助识别一行在删除或修改之前的外观。由于没有程序/脚本理解您检查的代码,因此很难以编程方式执行这些步骤。 -
但是为什么 smartgit 发现了那个 commit 而 git 没有责备呢?
标签: git