如何通过文件哈希从git存储库中查找文件修订或提交?

时间:2016-07-30 19:49:42

标签: git hash

我有一个git diff输出,包含这样的行:index 0056c73..92c6cbd 100644用于每个文件。我知道它来自哪个存储库,但遗憾的是它不知道它正在诋毁哪个版本的存储库

如何找到diff所针对的存储库的提交?

或者,如何找到diff中前映像哈希对应的每个文件的确切提交? (即上述示例中哪个版本的文件具有0056c73哈希)

2 个答案:

答案 0 :(得分:3)

如果您知道文件的路径,则可以开始显示所述路径的所有提交:

git log --all --pretty=format:%H <path>

如果0056c73是该文件的blob SHA1,git ls-tree将打印所有条目SHA1,您可以grep你所追求的那个。

Which commit has this blob?”从aragaer

提出这个单行
git log --all --pretty=format:%H <path> | xargs -n1 -I% sh -c "git ls-tree % <path> | grep -q <hash> && echo %"

(将<hash>替换为0056c73

正如我在“Which commit has this blob?”中提到的,使用Git 2.16 +(2017年12月),您可以使用:

答案 1 :(得分:1)

正如https://stackoverflow.com/a/48027778/239657中所述,自Git 2.16(2018年第一季度)以来,您只需运行git describe 0056c73。 另一个回购示例:

$ git show d69fe27cf937398fa2bf6813674a3975bfe56e89 | grep e1cfe5
index 6e180f8221..e1cfe56bf6 100755
$ git describe e1cfe56bf6
1.1.0.Beta2-7645-gd69fe27cf9:adapters/oidc/js/src/main/resources/keycloak.js
$ git describe e1cfe56bf6 --abbrev=40
1.1.0.Beta2-7645-gd69fe27cf937398fa2bf6813674a3975bfe56e89:adapters/oidc/js/src/main/resources/keycloak.js

您可以使用git describe标志来调整关闭标签的友好查找,而不是仅显示提交哈希...