如何找到git SHA指向分支HEAD?

Chr*_*oph 11 git

为了避免在使用(python)脚本检出某个git SHA时不必要的分离HEAD,我想检查一个分支,如果该SHA恰好是分支的当前HEAD.

理想情况下,我想给git一个SHA,如果SHA在分支的当前提示上,则返回分支名称,否则返回错误.

git describe --all --exact-match <SHA> 几乎就是我需要的,只是它主要针对标签,所以如果分支标签指向我的SHA(例如,经常发生在我们的发布分支中),则只给出标签.这没用,因为签出标签会导致分离的HEAD(即使分支指向同一个SHA).

注意,我不想这样做git branch --contains- 我不需要知道哪些分支包含我的提交.

如果没有像git describe只有分支的命令,我知道我可以通过分支交叉检查我的SHA git show-ref.不过,这不是最优雅的解决方案.

我也可以这样做git name-rev --name-only <hash>,但是我必须手动检查~字符的输出,如果有一个git命令在某处做同样的事情,这会感觉不自在.

Joh*_*ter 8

你可以尝试这样的事情:

git for-each-ref --format="%(refname:short) %(objectname)" 'refs/heads/' |
    grep SHA1 | cut -d " " -f 1
Run Code Online (Sandbox Code Playgroud)

这应该为您提供当前处于修订版本的分支列表SHA1.


Von*_*onC 3

随着即将到来的 git 2.7(2015 年第 4 季度),您将获得更完整的版本git for-each-ref,它现在支持--points-at

git for-each-ref --points-at <branch_name>
Run Code Online (Sandbox Code Playgroud)

与文档:

--points-at <object>:
Run Code Online (Sandbox Code Playgroud)

仅列出指向给定对象的引用。

这将允许检查提交是否是该列表的一部分。


请参阅提交 4a71109提交 ee2bd06提交 f266c91提交 9d306b5提交 7c32834提交 35257aa提交 5afcb90、...、提交 b2172fd(2015 年 7 月 7 日)和提交 af83baf(2015 年 7 月 09 日),作者:Karthik Nayak ( KarthikNayak)
(由Junio C Hamano 合并 -- gitster--提交9958dd8,2015年 10 月 5 日)

git tag -l“ ”和“ ”的一些功能git branch -l已可供“ ”使用git for-each-ref,以便最终可以在后续的一两个系列中在所有三个之间共享统一的实现。

* kn/for-each-tag-branch:
  for-each-ref: add '--contains' option
  ref-filter: implement '--contains' option
  parse-options.h: add macros for '--contains' option
  parse-option: rename parse_opt_with_commit()
  for-each-ref: add '--merged' and '--no-merged' options
  ref-filter: implement '--merged' and '--no-merged' options
  ref-filter: add parse_opt_merge_filter()
  for-each-ref: add '--points-at' option
  ref-filter: implement '--points-at' option  
Run Code Online (Sandbox Code Playgroud)