GitHub:搜索旧版本文件

142
我知道使用GitHub可以搜索存储库中所有当前版本的文件。但是,我也想搜索存储库文件的旧版本。例如,假设我以前在代码中有一个名为get_info()的函数,但是在几个版本之前将其删除了,那么是否可以搜索get_info并找到代码呢?如果无法在GitHub中完成,则是否可以使用git命令行完成?

编辑

感谢@Mark Longair展示了如何从git命令行执行此操作。如果GitHub不支持该功能,那么拥有这个功能将非常棒。

敢问...一个“显而易见”的功能...是必须要有的吗? - Jarad
4个回答

161

目前,我不认为在GitHub网站上可以搜索存储库代码的完整历史记录。最接近的是在此页面上使用“代码搜索”选项仅在存储库当前代码中进行搜索。

但是,从命令行可以使用-S选项来查找引入或删除提及get_info行的任何提交,并使用git log。 例如:

git log -Sget_info -p

(注意:在搜索词和-S之间不应有空格)

(还要注意:要搜索多个单词,请用'括起来):

git log -S'get info' -p

所以,至少应该找到引入该函数的提交和删除它的提交。我添加了-p,这样您也可以看到补丁-如果有很多提交引入了提到该函数的更改,那可能会有帮助。如果该函数只在另一个分支上,则使用--all搜索所有分支也可能有用。 Jefromi在下面的评论中指出,git 1.7.4将引入-G选项作为替代方案-这个变化在Junio Hamano(git维护者)最近的博客文章中进行了总结:http://gitster.livejournal.com/48191.html

4
我知道我可以搜索评论,但是如何搜索代码? - normski
13
-S 选项确实会查看代码-它会找到任何包含 get_info 函数的提交,该提交引入了一个差异。你可能混淆了 --grep 选项,它可以搜索日志信息。 - Mark Longair
4
近期版本的Git增加了类似的-G选项,它接受正则表达式而不是固定字符串。 - Cascabel
2
@Anthony Damico:是的,只需引用搜索字符串,例如 git log -S'get info' -p - Mark Longair
@MichaelChirico 好久不见了,我也不确定我当时做了什么。我打算删除这条评论。 - Ioannis
显示剩余5条评论

14
git log -G'your text' -p --all
请注意以下来自文档的内容:

[...] 在同一个文件中考虑具有以下差异的提交:

+    return frotz(nitfol, two->ptr, 1, 0);
...
-    hit = frotz(nitfol, mf2.ptr, 1, 0);

感谢Mark和Cascabel指出正确方向。

虽然git log -G"frotz\(nitfol"会显示此提交,但git log -S"frotz\(nitfol" --pickaxe-regex不会(因为该字符串的出现次数未更改)。


这对我有用,而被接受的答案却不够!谢谢。 - Antoine Colson

3

这在Github网页界面中是可能的。如果文件太大或不支持,Github可能会下载该文件,如果您的浏览器可以呈现该文件,则可能在新选项卡中打开它,或者可能直接显示它。以下是两种方法:

  1. 转到存储库并选择要查看历史记录的分支

方法1

  1. 导航到您的文件所在的文件夹。
  2. 单击“历史记录”,目前位于右侧上部区域。在Github网页界面上划线标出了'History'按钮-在您悬停在文本上之前,它看起来不像一个链接。
  3. 从这里,单击...我将称之为“代码纸”图标。它当前位于提交sha按钮的右侧,并带有“在历史记录中查看此时此刻”的标签。箭头指向Github网页界面上的'代码纸'图标。
  4. 单击“查看原始文件”(如果您跳过了第2步,请继续深入,直到找到所需的文件)以获取所需的代码。

方法二

  1. 点击右侧的“nnn次提交”文本。 箭头指向github网页界面中的“113次提交”链接,直到鼠标悬停在文本上才会显示链接。
  2. 点击“代码”按钮。这个按钮目前看起来像两个插入符号 '<>',并带有一个标签,“浏览此历史时刻的存储库。” 箭头指向github网页界面中带有左右插入符号图像的“代码”按钮。
  3. 深入查找所需的文件,以获取代码。

当我知道需要哪个文件,但不知道要回退到哪个提交时,方法1似乎更有效率。当我确切地知道要查看哪个时间窗口或提交时,方法2更快,但可能不知道文件位于何处。


声明:UI经常变化。


1

要直接从GitHub在线GUI查看存储库历史记录中的文件,请执行以下步骤。在您的存储库中:

  1. 查看以前的提交。 View previous commits.
  2. 选择与您希望查看的历史记录点相对应的提交的分支ID。 Select the branch ID
  3. 在左上角选择浏览文件以查看该时间点的所有文件。 Select Browse Files

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接