【问题标题】:Get the short Git version hash获取简短的 Git 版本哈希
【发布时间】:2011-08-07 08:29:52
【问题描述】:

有没有更简洁的方法从 Git 中获取 HEAD 的短版本哈希?

我想看到和我一样的输出:

 git log -n 1 | head -n 1 | sed -e 's/^commit //' | head -c 8

我原来是用上面的命令来生成版本字符串的,但是这个更好:

git describe --tags

它将输出诸如0.1.12(标记提交)或0.1.11-5-g0c85fbc(标记后五个提交)之类的字符串。

【问题讨论】:

  • 既然你似乎很擅长用管道之类的东西来操作数据,你应该知道git aliases。在这种情况下,有一个你想要的命令(见答案),但最终你会发现没有的东西,别名非常适合。
  • @MatrixFrog 感谢您的提示!我已经有了一些简单的 git 别名,但直到现在我才知道它们有多强大。我特别喜欢graphviz显示。
  • 嗯。当我运行 git describe --tags 时,我收到消息,“致命:找不到名称,无法描述任何内容。”.
  • @QuinnComendant 你可能需要先标记一些东西,--tags 才能工作。试试creating a tag first;例如git tag 1.0.0.

标签: git


【解决方案1】:

这个呢:

git log --pretty="%h %cD %cn %s"  

它显示了类似的东西:

674cd0d 2019 年 11 月 20 日星期三 12:15:38 +0000 Bob 提交消息

pretty format documentation

【讨论】:

    【解决方案2】:

    试试这个:

    git rev-parse --short HEAD
    

    git rev-parse 命令可以做很多不同的事情,所以你需要非常仔细地检查the documentation 才能发现这一点。

    【讨论】:

    • 你可以做相反的事情,并通过执行以下git rev-parse HEAD 从短提交哈希中获取长提交哈希
    • 该命令也适用于从git log等其他来源复制粘贴的长版本ID,例如git rev-parse --short 97dd2ae065771908ee9ae0fa08ccdb58b5a6b18f返回97dd2ae
    • 它只适用于参考。您可以使用 HEAD、标签名称、分支名称或普通哈希。
    • 警告,这会返回一个 7 个字符的提交哈希(默认情况下),而 gitlab 等许多地方使用 8 个字符!
    • 您可以使用 git rev-parse --short=8 HEAD 获取 GitLab 使用的 8 个字符长度。您还可以使用 git config core.abbrev 8 Source 之类的命令将特定 git repo 的 core.abbrev 设置为 8
    【解决方案3】:

    我有具有以下设置的 Git 版本 2.7.4:

    git config --global log.abbrevcommit yes
    git config --global core.abbrev 8
    

    现在当我这样做时:

    git log --pretty=oneline
    

    我得到一个 8 位数的缩写提交 ID:

    ed054a38 add project based .gitignore
    30a3fa4c add ez version
    0a6e9015 add logic for shifting days
    af4ab954 add n days ago
    ...
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关其解决问题的方式和原因的额外上下文将提高​​答案的长期价值。
    • 好主意。欣赏它,雪莉
    • 这是迄今为止最好的答案!谢谢!
    【解决方案4】:

    查看 Git 提交短版和 Git 提交消息的简单方法是:

    git log --oneline
    

    注意这是简写

    git log --pretty=oneline --abbrev-commit
    

    【讨论】:

    • --oneline 是最好的选择
    • @JuanIgnacioBarisich 最佳选择取决于您需要查看多少信息。如果需要更多信息,如作者或日期,那么 git log --abbrev-commit 将是一个更好的选择。还 log --pretty 可能是选择要记录哪些信息的更好选择
    【解决方案5】:
    git log -1 --abbrev-commit
    

    也会这样做。

    git log --abbrev-commit
    

    将列出带有缩写 SHA-1 校验和的日志条目。

    【讨论】:

    • 第二个正是我要找的!在日常生活中非常容易记住和有用。
    • 也适用于git log --pretty=oneline,这与--oneline不同,否则会打印全尺寸散列。
    • 太棒了!我添加了以下aliasabbrev = log --abbrev-commit,所以现在我可以运行git abbrev
    【解决方案6】:

    一个非常简单的方法是:

    git describe --always
    

    【讨论】:

    • 哈,甜心,解决了 git describe 否则会失败的情况(因为 describe 期望在历史的某个地方有一个标签)thx
    • 如果你严格地想要短哈希就不好了——因为这可以返回一个带注释的标签。
    • 在某些情况下git describe --long 可能会有所帮助。来自docs:“始终输出长格式(标签、提交次数和缩写提交名称)即使它与标签匹配。” [我的重点]
    • 使用--long 更好,但有时你会得到一个短散列,有时是由连字符分隔的 3 个项目。这些天来,我使用公认的答案。过去,我不知道带注释的标签——也许它们甚至不存在!
    【解决方案7】:

    带有短哈希和最后一条评论的分支:

    git branch -v
    
      develop      717c2f9 [ahead 42] blabla
    * master       2722bbe [ahead 1] bla
    

    【讨论】:

      【解决方案8】:

      你可以用--pretty=format:做任何你想要的格式

      git log -1 --pretty=format:%h 
      

      【讨论】:

        猜你喜欢
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 2017-06-21
        • 2021-06-13
        • 1970-01-01
        • 2015-06-22
        相关资源
        最近更新 更多