【问题标题】:How can I get the associated ref path for a git SHA?如何获取 git SHA 的关联引用路径?
【发布时间】:2010-03-28 08:54:12
【问题描述】:

我希望能够将任何内容传递给 git 命令(也许它是一个 SHA,也许它只是像“origin/master”或“devel/epxerimental”等)并且 git 告诉我分支的 ref 路径传递的东西生活在其中,例如

<git_command> 0dc27819b8e9 => output: refs/heads/master
<git_command> xyz/test => output: refs/remotes/xyz/master
...

我一直在查看git showgit loggit rev-parse,除了--pretty=format:%d,我什么也找不到。 (--pretty=format:%d 输出很奇怪,有很多可用空间和空行,有时不止一个参考路径在一行上捆绑在一起)。

一定有更好的方法吗?

感谢阅读。

安德烈

【问题讨论】:

    标签: git shell


    【解决方案1】:

    没有可以记录此类数据的固定信息,因为 SHA1 并非始终与参考路径相关联。
    分支可以移动、重命名或删除,而 SHA1 仍将被存储(除非它没有被任何 ref 模式引用,否则最终会被修剪)

    话虽如此:

    git show-ref |grep yourSHA1|awk "{print $2}"
    git show-ref --heads --tags -d |grep yourSHA1|awk "{print $2}"
    

    非常接近您想要的:

    C:\Prog\Git\tests\rep\main5>git show-ref | grep f4a071 | awk "{print $2}"
    refs/heads/master
    refs/remotes/origin/HEAD
    refs/remotes/origin/master
    

    git show-ref 有很多选项可供您选择:

    • 显示也取消引用 SHA1
    • 仅针对参考模式显示 SHA1

    OP 补充说:

    如果传递的 SHA 没有引用头部或任何其他可取消引用的提交,它不会返回任何内容?
    你知道我们如何做中间步骤,找出与 SHA 通过的属于同一分支的最近提交的 SHA 吗?

    另一个可以提供帮助的管道命令是git name-rev

    C:\Prog\Git\tests\rep\main5>git name-rev a7768453
    a7768453 patches~1
    
    C:\Prog\Git\tests\rep\main5>git name-rev a7768453|gawk "{gsub(/~.*/,\"\",$2);print $2}
    patches
    

    正如 Jefromi 在 cmets 中提到的那样,瓷器命令将是 git branch --contain

    C:\Prog\Git\tests\rep\main5>git branch --contain 1e73e369
      master
    * patches
      tmp
    
    --contains <commit>
    

    仅列出包含指定提交的分支。
    如果要重新设置或修改&lt;commit&gt;,它用于查找需要特别注意的所有分支,因为这些分支包含指定的&lt;commit&gt;

    【讨论】:

    • 非常感谢,你是对的,10 次中至少有 9 次接近。唯一的问题是:如果传递的 SHA 没有引用头部或任何其他,它将什么也不返回可取消引用的提交?你知道我们如何做中间步骤,找出与 SHA 传递的属于同一分支的最近提交的 SHA(例如,如果我们为提交 32 传递 SHA,我们将返回提交 0 的 SHA(又名头))?
    • @andreb:好点。 show-ref 仅适用于参考直接引用的 SHA1。 name-rev 可以帮助解决剩下的问题。请参阅我的更新答案。
    • @andreb:更多信息请参见stackoverflow.com/questions/917102/…
    • 另一个相关的命令是git branch --contains &lt;commit&gt;,它告诉你哪些分支包含给定的提交。
    • @Jefromi:谢谢你的瓷器命令。答案已更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2019-09-30
    • 2018-03-04
    • 1970-01-01
    相关资源
    最近更新 更多