在Git中,是否有一种方法可以获取任意提交的“友好”名称?

19
在Git中,有很多方法可以引用提交,包括完整的SHA哈希或哈希的缩写形式(比如前6个字符)。您还可以使用“友好”的语法为提交命名,例如HEAD、HEAD^、HEAD^^、HEAD~3等。
给定一个任意的SHA哈希形式的提交,是否有一个Git工具可以找到该提交的“友好”名称?
如果我使用git-show-branch,则会获得以“友好”形式列出的修订版本列表,所以我觉得一定有方法……但我找不到可以做到这一点的工具。

仅为完整起见,这里是相反的问题:https://dev59.com/C3A75IYBdhLWcg3w-OVA - Benjol
2个回答

19
你可以使用 "git name-rev" 来获取你所问的形式。这种形式的问题之一是,它只是相对于一个分支,不是永久的名称。因此,另一种选择是使用 "git describe",它会根据给定提交距离标签有多远来生成另一种友好的名称。
例如:
srh@devo16:~/src/git <master>$ git name-rev 3cd7388
3cd7388 master~2

但是在我执行了 "git pull" 之后,master~2 可能意味着不同的东西。相比之下:

srh@devo16:~/src/git <master>$ git describe 3cd7388
v1.6.3.1-153-g3cd7388

现在,“v1.6.3.1-153-g3cd7388”是一个永久的名称。当然,它仍然有点长(尽管您可以通过指定“--abbrev=4”来缩短末尾的哈希位),但它传达了3cd7388版本比1.6.3.1晚了153个更改。


1
谢谢,这两种技术都很有用。我更感兴趣的是 git-name-rev 的行为,因为我的具体用例是使用 git-log --grep 查找具有特定消息的提交,然后我希望能够将其作为参数引用到 git-revert 中,而不必记住哈希值。 - mipadi
2
在这种情况下,注意使用 "--stdin" 选项到 git name-rev 命令:您应该能够将 git log 输出直接传输到它。 - araqnid
1
不必记住 git-name-rev,您可以使用“git describe --contains”,和/或使用 --decorate 选项来 git-log。 - Jakub Narębski

4
尝试使用“git describe”命令:
$ git describe --all --contains 90de2680dc54c0d600b0694bd175bd09357a8dba
master~2

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