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

时间:2014-12-12 12:11:16

标签: git

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

如何找出更改此特定行的人和提交者?

我试过

git log -some_distinct_string_from_that_line --pretty=format:'%h %an -- %s -- %ad'

其中显示了所有提交评论和作者的提交,这些提交更改了包含一行的所有内容" one_distinct_string_from_that_line",但我怎样才能看到他们所做的实际更改?

编辑:
我还安装了git-gui并查看了git gui blame filename的行,但是显示的那一行只有一次提交更改,但肯定有更多更改。

我使用图形gui smartgit查看了手动对该文件所做的所有更改,我找到了3个提交,其中该行已经过编辑(首先删除#然后再次添加另一个提交)

是否存在另一种不会在git blame功能上进行中继的方式,并且根据假设不进行中继,该行是在commit-diff中?

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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'

说明:

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

答案 2 :(得分:0)

使用gitk,你可以这样做:

gitk -Sone_distinct_string_from_that_line -- /some_sub_dir/containing/the/file

您将获得部分历史记录,其中仅包含差异中one_distinct_string_from_that_line所在的提交。 对于每个提交,您可以查看作者,注释,上下文,并检查完全改变的内容。

--之后的部分是optionnal,它将研究限制在您的存储库的子目录中。

答案 3 :(得分:0)

执行以下命令

cd repo<Project>
git config --global core.autocrlf true

更改一些代码行

比对分支,标签等

答案 4 :(得分:0)

如果您使用的是pycharm的git集成,则可以选择感兴趣的行,并使用git-show history从上下文菜单中进行选择