我希望能够将任何内容传递给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 show
或git log
或git rev-parse
,除了--pretty=format:%d
我找不到任何内容。
(--pretty=format:%d
输出非常奇怪,有很多可用空间和空行,有时一条线上有多个ref路径聚集在一起)。
必须有更好的方法吗?
感谢阅读。
安德烈
答案 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
有很多选项可供您使用:
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>
。