通过一个 Git 远程跟踪分支的给定名称如何找到哪个本地分支跟踪它?

By given name of a Git remote-tracking branch how to find which local branch tracks it?

通过 Git 远程跟踪分支的给定名称,例如,upstream/develop 如果有的话,如何找到哪个本地分支跟踪它?

如果可能的话,我正在寻找一种不依赖于 shell 脚本并且也适用于 Windows.

的解决方案

基于this answer (branch enumeration) and this answer(检索上游分支),您可以遍历本地分支并检查是否有任何分支具有所需的跟踪远程分支:

git for-each-ref --shell \
  --format='test %(upstream:short) = "upstream/develop" && echo %(refname:short)' \
  refs/heads/ | sh

另一种方法是使用 conditional formatfor-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/)%(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=)%(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 branchvery verbose 输出
git branch -vv | grep upstream/develop