协慌网

登录 贡献 社区

如何查看哪个 Git 分支正在跟踪哪个远程 / 上游分支?

我知道我可以做git branch --all ,这向我显示了本地和远程分支,但是对我来说它们之间的关系并不是那么有用。

如何以显示哪个本地分支跟踪哪个远程的方式列出分支?

答案

非常像瓷器命令,如果您希望使用它来编写脚本,则效果不佳:

git branch -vv   # doubly verbose!

请注意,在 git 1.8.3 中,上游分支显示为蓝色 (请参阅 “ git 中的此分支跟踪(如果有)是什么? ”)


如果您想要干净的输出,请参阅arcresu 的答案 - 它使用的瓷器命令在我最初编写此答案时不存在,因此它更为简洁,可与配置用于重新设置基准的分支一起使用,而不仅仅是合并。

git remote show origin

用遥控器的名称替换 “origin”。

如果查看git-rev-parse的手册页,将会看到以下语法说明:

<branchname>@{upstream} ,例如master@{upstream}@{u}

分支名称的后缀@{upstream} (缩写形式<branchname>@{u} )是指分支名称所指定的分支设置为在其顶部构建的分支。缺少的分支名称默认为当前分支名称。

因此,要找到分支master的上游,您可以执行以下操作:

git rev-parse --abbrev-ref master@{upstream}
# => origin/master

要打印每个分支的信息,您可以执行以下操作:

while read branch; do
  upstream=$(git rev-parse --abbrev-ref $branch@{upstream} 2>/dev/null)
  if [[ $? == 0 ]]; then
    echo $branch tracks $upstream
  else
    echo $branch has no upstream configured
  fi
done < <(git for-each-ref --format='%(refname:short)' refs/heads/*)

# Output:
# master tracks origin/master
# ...

这比手动解析引用和配置干净。