Dan*_*nor 7 git renaming git-log
我准备在现有项目中移动大量文件.在我这样做之前,我想牢牢掌握一些用于分析具有多文件历史记录的代码的技术.
我怎么能用git问:"这行代码来自哪里?" 当内容在其生命周期中移动了多个文件?
我知道git没有明确地跟踪重命名(有充分的理由)所以看起来我应该能够问这个,我只是不确定如何.如果有方法可视化这个也很好知道.
我建议在git工具箱中查看三个工具.第一个是责备,这与cvs中的非常相同.它显示了哪个提交最后触及文件中的每一行.如果你想看看以前有什么,你可以采取触及该行的提交并查看之前的提交.
git show <sha1_of_interesting_commit>^ -- file/path
Run Code Online (Sandbox Code Playgroud)
你可以重复责备,看看之前发生了什么.
git blame <sha1_of_interesting_commit>^ -- file/path
Run Code Online (Sandbox Code Playgroud)
第二个工具--follow用于跟踪过去重命名的文件.
git log --follow -- file/path
Run Code Online (Sandbox Code Playgroud)
第三个 - 也许是最有用的工具 - 是用于记录的pickaxe选项.这会搜索历史记录,以更改包含给定文本位的已删除,已引入或已更改的行.这对于跟踪函数名称等内容特别有用.它可能是特定提交中的文件中的新内容,但它是否来自不同的源文件?是在同一时间或在移动之前添加了对它的呼叫?
git log -S"Interesting_Function"
Run Code Online (Sandbox Code Playgroud)
如果您正在使用补丁或统计选项(例如-p或--stat),则输出将仅限于那些其更改实际涉及搜索字符串的文件,除非您还使用--pickaxe-all显示整个更改的位置.
结合git grep显示字符串当前出现的位置,pickaxe是一个非常有用的历史挖掘工具.