如何获取git SHA的关联ref路径?

时间:2010-03-28 08:54:12

标签: git shell

我希望能够将任何内容传递给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输出非常奇怪,有很多可用空间和空行,有时一条线上有多个ref路径聚集在一起)。

必须有更好的方法吗?

感谢阅读。

安德烈

1 个答案:

答案 0 :(得分:5)

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

话虽如此:

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在评论中提到的那样,瓷器命令是git branch --contain

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

--contains <commit>
  

仅列出包含指定提交的分支   它用于查找需要特别注意的所有分支,如果要<commit>进行重新定义或修改,因为这些分支包含指定的<commit>