我有一行最近更改为非工作状态的代码。
如何找出更改此特定行的人和提交者?
我试过
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中?
答案 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从上下文菜单中进行选择