【发布时间】:2010-04-23 16:10:55
【问题描述】:
我需要在 git 存储库中搜索特定文件的历史记录以找到已消失的行。提交消息将没有任何相关文本可供搜索。我使用什么命令?
更多详情:这是我在非恒星任务跟踪软件中的待办事项列表的历史记录。我已经保留了两年,因为软件中没有为我保留足够的信息。不幸的是,我的提交消息通常只有任务 ID,而我需要做的是按主题而不是按编号查找已关闭的任务。是的,真正的解决方案是更好的任务跟踪软件,但这完全不在我的掌控之中。
【问题讨论】:
标签: git
我需要在 git 存储库中搜索特定文件的历史记录以找到已消失的行。提交消息将没有任何相关文本可供搜索。我使用什么命令?
更多详情:这是我在非恒星任务跟踪软件中的待办事项列表的历史记录。我已经保留了两年,因为软件中没有为我保留足够的信息。不幸的是,我的提交消息通常只有任务 ID,而我需要做的是按主题而不是按编号查找已关闭的任务。是的,真正的解决方案是更好的任务跟踪软件,但这完全不在我的掌控之中。
【问题讨论】:
标签: git
这是镐的工作!
来自 git-log 手册页:
-S<string>查找引入或删除
<string>实例的差异。请注意,这与仅出现在 diff 输出中的字符串不同;有关详细信息,请参阅 gitdiffcore(7) 中的镐条目。
您当然可以使用更多选项来缩小范围,例如:
git log -Sfoobar --since=2008.1.1 --until=2009.1.1 -- path_containing_change
还有:
-G<regex>查找补丁文本包含匹配的添加/删除行的差异。 为了说明 -S --pickaxe-regex 和 -G 之间的区别,请考虑在同一文件中具有以下差异的提交:
+ return frotz(nitfol, two->ptr, 1, 0);
...
- hit = frotz(nitfol, mf2.ptr, 1, 0);虽然
git log -G"frotz\(nitfol"将显示此提交,但git log -S"frotz\(nitfol" --pickaxe-regex不会(因为该字符串的出现次数没有改变)。
【讨论】:
git log -GcountryCodesArray --since=2013.2.13 --until=2013.3.14 -- application/modules/default/
git log -G 的文档:git-scm.com/docs/git-log#Documentation/git-log.txt--Gltregexgt。特别注意,如果您正在寻找特殊字符,可以使用引号:git log -G"Microsoft.Network/dnsZones/A"
git log --stat | grep 'filename' 开始缩小范围怎么样?
【讨论】:
git log filename.