根据给定的Git远程跟踪分支的名称,例如upstream/develop
,如何找到哪个本地分支跟踪它(如果有的话(?
如果可能的话,我正在寻找一个不依赖于shell脚本并且也适用于Windows的解决方案。
另一种选择是使用带有for-each-ref
的条件格式
git for-each-ref --format="%(if:equals=upstream/develop)%(upstream:short)%(then)%(refname:short)%(end)" refs/heads | sort -u
可以更方便地将其放入类似的别名中
git config --global alias.who-tracks '!f() { git for-each-ref --format="%(if:equals=upstream/$1)%(upstream:short)%(then)%(refname:short)%(end)" refs/heads | sort -u; }; f'
# then when you need it :
git who-tracks develop
git who-tracks another/branch
在这个别名中,我假设有一个唯一的远程,但当然,如果你想在不同的远程上使用它,可以稍微调整一下,在参数中包括远程名称:
git config --global alias.who-tracks '!f() { git for-each-ref --format="%(if:equals=$1)%(upstream:short)%(then)%(refname:short)%(end)" refs/heads | sort -u; }; f'
# then when you need it :
git who-tracks upstream/develop
git who-tracks origin/another/branch
另一个替代方案是用grep
过滤简单git branch
的非常详细的输出
git branch -vv | grep upstream/develop
基于这个答案(分支枚举(和这个答案(检索上游分支(,您可以遍历本地分支,并检查其中是否有所需的跟踪远程分支:
git for-each-ref --shell
--format='test %(upstream:short) = "upstream/develop" && echo %(refname:short)'
refs/heads/ | sh