我想知道文件是否已重命名。我正在使用git来跟踪项目。
如何使用git查看过去是否已重命名此特定文件?另外,我想将搜索限制在最近一段时间,例如1个月或1年。
答案 0 :(得分:2)
您可以尝试的一个选项是git blame
。
它向您显示给定文件的每个请求行,哪个提交负责该行,有时它会显示该提交中文件的名称(如果它检测到多个文件对其有贡献)
例如(来自GitBook):
Git的另一个很酷的事情是它不会显式跟踪文件重命名。它会记录快照,然后尝试在事后确定隐式重命名的内容。其中一个有趣的功能是你可以要求它找出各种代码运动。如果你将-C传递给git blame,Git会分析你正在注释的文件,并试图找出它中的代码片段最初来自哪里,如果它们是从其他地方复制的。最近,我将一个名为GITServerHandler.m的文件重构为多个文件,其中一个是GITPackUpload.m。通过使用-C选项指责GITPackUpload.m,我可以看到代码的哪些部分最初来自:
$ git blame -C -L 141,153 GITPackUpload.m
f344f58d GITServerHandler.m (Scott 2009-01-04 141)
f344f58d GITServerHandler.m (Scott 2009-01-04 142) - (void) gatherObjectShasFromC
f344f58d GITServerHandler.m (Scott 2009-01-04 143) {
70befddd GITServerHandler.m (Scott 2009-03-22 144) //NSLog(@"GATHER COMMI
ad11ac80 GITPackUpload.m (Scott 2009-03-24 145)
ad11ac80 GITPackUpload.m (Scott 2009-03-24 146) NSString *parentSha;
ad11ac80 GITPackUpload.m (Scott 2009-03-24 147) GITCommit *commit = [g
ad11ac80 GITPackUpload.m (Scott 2009-03-24 148)
ad11ac80 GITPackUpload.m (Scott 2009-03-24 149) //NSLog(@"GATHER COMMI
ad11ac80 GITPackUpload.m (Scott 2009-03-24 150)
56ef2caf GITServerHandler.m (Scott 2009-01-05 151) if(commit) {
56ef2caf GITServerHandler.m (Scott 2009-01-05 152) [refDict setOb
56ef2caf GITServerHandler.m (Scott 2009-01-05 153)
有关git blame
选项的更多信息(来自man page):
-C|<num>|
除了-M之外,检测从同一提交中修改的其他文件移动或复制的行。这对你很有用 重新组织您的程序并跨文件移动代码。当这个 选项被给出两次,该命令另外查找副本 创建文件的提交中的其他文件。当这个选项是 给定三次,该命令另外查找来自的副本 任何提交中的其他文件。
<num>
是可选的,但它是git必须检测到的字母数字字符数的下限。 用于将这些行与父提交相关联的文件。而且 默认值为40.如果给出多个-C选项,则 最后一个-C的参数将生效。
并将其限制在一段时间内:
- 日期
<format>
该值是以下备选方案之一:{relative,local,default,iso,rfc,short}。如果未提供--date,则使用blame.date配置变量的值。如果未设置blame.date配置变量,则使用iso格式。有关更多信息,请参阅git-log(1)中对--date选项的讨论。
答案 1 :(得分:1)
您可以将git log
与--follow
选项一起用于特定path/file
,并添加--after=date
选项以显示比特定日期更近的提交。
git log --oneline --name-only --follow -- path/file
在下面的示例中,使用file2
提交重命名了069396b
。之前是file1
。
$ ls
file2
$ git log --oneline --name-only --follow -- file2
6589023 msg
file2
069396b msg
file2
10f5830 msg
file1
2ce8c3d msg
file1
来自git-log手册页
- 按照:继续列出重命名以外的文件历史记录(仅适用于单个文件)。
答案 2 :(得分:0)
Alper部分回答了这个问题。我想我也会回答问题的时间段部分:
git log --oneline --name-only --follow --since=<time period> --diff-filter=R -- path/file
将提供重命名文件的提交(如果有)。如果没有重命名,则不存在此类提交,因此不会返回任何内容。