在 GitHub 上查找给定的提交哈希值

451

我对Github还比较新,遇到了一个业余问题。

我被要求进行代码审查,并提供了一个提交哈希值,但我尝试在Git中搜索使用提交哈希值的方法时没有找到任何信息。

是否有一种方法可以仅使用提交哈希值查找更改的代码?


81
我觉得非常奇怪的是,github在搜索时不能识别哈希值并显示匹配该哈希值的提交记录。 - Craig Ringer
实际上,@CraigRinger,GitHub搜索将匹配哈希值如果它们出现在拉取请求中。确实,您可以搜索整个GitHub以获取七个字符的哈希前缀。但它必须是一个拉取请求,而不仅仅是任何提交。 - Todd Owen
9
很好,但这不是重点。当您在某个仓库中搜索时,它应该匹配该仓库中的提交哈希值,这确实很奇怪。 - Craig Ringer
5
现在它可以了,终于!请看我的新答案 - Todd Owen
自2017年以来,hash:<sha> 通过 ⬇️ - cachius
4个回答

553

一个形如https://github.com/<owner>/<project>/commit/<hash>的 URL 将显示该提交引入的更改。例如,这是我在 GitHub 上针对我的一个项目最近修复漏洞所做的更改:

https://github.com/jerith666/git-graph/commit/35e32b6a00dec02ae7d7c45c6b7106779a124685

你也可以缩短哈希值到任何唯一前缀,例如:

https://github.com/jerith666/git-graph/commit/35e32b


我知道你只是询问 GitHub,但为了完整起见:如果你已经将存储库检出,在命令行中,您可以使用以下任一命令(唯一前缀也适用)实现基本相同的功能:

git show 35e32b6a00dec02ae7d7c45c6b7106779a124685
git log -p -1 35e32b6a00dec02ae7d7c45c6b7106779a124685
注意:如果您将提交哈希值缩短得过多,命令行会提供一个有用的消歧消息,但 GitHub 只会返回 404 错误页面。

1
当我尝试跟踪Mongo中的断言时,我发现有一个类似的URL模式可以查看特定文件,只需给出提交哈希:https://github.com/$owner/$project/blob/$hash/path/to/file.ext - 例如 https://github.com/mongodb/mongo/blob/f570771a5d8a3846eb7586eaffcf4c2f4a96bf08/src/mongo/shell/shell_utils_launcher.cpp - RubyTuesdayDONO
还有一个注意事项,但非常重要:同样地,您无法指定分支,但是当您提供哈希值时,它会自动搜索本地和远程分支。因此,是的,您可以通过命令行在合并到本地存储库之前搜索特定的远程差异。 - Rafael Barros
2
如果有人想知道(我就是!),这也适用于Github上哈希的前8个字符:https://github.com/jerith666/git-graph/commit/35e32b6a,以及命令行上的哈希:`git log -p -1 35e32b6a`。 - SimplGy
8
界面没有让这件事情变得更容易,有点愚蠢...希望功能请求能够改善它。 - ocroquette
1
现在UI已经支持了这个功能。搜索hash:<sha>,就可以轻松找到了! - Greg Tarsa
显示剩余5条评论

89

查看单个提交记录:
https://github.com/<user>/<project>/commit/<hash>

查看日志:
https://github.com/<user>/<project>/commits/<hash>

查看完整库:
https://github.com/<user>/<project>/tree/<hash>

<hash> 可以是任意长度,只要确保它唯一即可。


2
如果长度至少为7个字符,翻译下面与程序相关的内容 - Kasun Siyambalapitiya
4
提交哈希值的最小长度没有限制(只要在整个代码库中是唯一的),长度可以小于4个字符。 - qwertzguy

52

最近GitHub新增了搜索提交的功能。

要搜索哈希值,只需在搜索框中输入至少前7个字符。然后在结果页面上,单击“提交”选项卡即可查看匹配的提交(但仅限于默认分支,通常为master),或单击“问题”选项卡以查看包含提交的拉取请求。

如果想更明确地搜索,可以添加hash:前缀进行搜索,但这并不是必须的。

此外,还有一个REST API(撰写本文时仍处于预览状态)。


3
我很惊讶它实际上是这样运作的。这一点非常不直观。默认情况下,Github将显示“代码”选项卡,很明显里面没有任何结果。难道它不应该默认显示唯一有结果的选项卡吗? - summerian
4
简而言之,如果你拥有自己的 GitHub 企业版安装,在搜索栏输入以下链接即可查找任何存储库中的任何提交记录:https://YourGithubDomain/search?q=YOUR_COMMIT_HASH&type=Commits请注意,我在 GitHub 上尝试过这种方法,也可以使用。例如:https://github.com/search?q=38db172d13962ea177c00c9a3b4b3169b317e94b&type=Commits - Brad Parks
1
@Todd 我们的代码库里我无法使这个工作起来。不过另一个使用 URL 的解决方案非常好。 - Darkhydro
2
在2022年,我们仍然无法使用GitHub.com搜索在所有分支中搜索哈希值,这似乎有些疯狂。虽然接受答案中的基于URL的解决方案有些笨重,但很可能会一直可靠地工作下去。 - Neman
要在所有分支中搜索哈希值,我必须在本地的代码库中使用git show -s <hash>命令。 - Annemie
要在所有分支中搜索哈希值,我必须在本地的存储库中使用git show -s <哈希值> - undefined

3

使用GitHub CLI gh v2.22.0(2023年1月),您可以从本地克隆的GitHub存储库中进行搜索:

查看gh search commits

示例:

# search commits matching hash "8dd03144ffdc6c0d486d6b705f9c7fba871ee7c3"
$ gh search commits --hash=8dd03144ffdc6c0d486d6b705f9c7fba871ee7c3

但也:

# search commits matching set of keywords "readme" and "typo"
$ gh search commits readme typo

# search commits matching phrase "bug fix"
$ gh search commits "bug fix"

# search commits committed by user "monalisa"
$ gh search commits --committer=monalisa

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