我怎样才能让git向我展示哪些分支正在跟踪什么?

我知道我可以做git branch --all这一切都显示了我本地和远程分支,但它并没有用于向我展示它们之间的关系。

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

非常多的瓷器命令,如果你想要这个脚本的话不是很好:

 git branch -vv # doubly verbose! 

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


如果你想要干净的输出,请参阅arcresu的答案 – 它使用了一个我最初写这个答案的时候并不相信的瓷器命令,所以它更简洁一些,并且configuration了分支的分支,而不仅仅是合并。

git remote show origin

用你的遥控器的名字replace'origin'。

kubi的答案的替代方法是查看显示本地存储库configuration的.git/config文件:

cat .git/config

如果你看一下git-rev-parse的手册页,你会看到下面的语法描述:

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

branchname(short form <branchname>@{u} )的后缀@{upstream}引用branchname指定的分支被设置为在其之上构build的分支。 缺less的branchname默认为当前的。

因此,要find分支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 # ... 

这比手动parsing引用和configuration更清洁。

对于目前的分支,这里有两个很好的select:

 % git rev-parse --abbrev-ref --symbolic-full-name @{u} origin/mainline 

要么

 % git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD) origin/mainline 

这个答案也在这里 ,一个稍微不同的问题是(错误地)标记为重复。

 git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads 

将为每个本地分支显示一行。 跟踪分支将如下所示:

 master <- origin/master 

一个非跟踪的将如下所示:

 test <- 

对于当前的分支,你也可以说git checkout (没有任何分支)。 对于当前分支来说,如果存在跟踪信息,这是一个没有操作的副作用。

 $ git checkout Your branch is up-to-date with 'origin/master'. 

我使用这个别名

 git config --global alias.track '!f() { ([ $# -eq 2 ] && ( echo "Setting tracking for branch " $1 " -> " $2;git branch --set-upstream $1 $2; ) || ( git for-each-ref --format="local: %(refname:short) <--sync--> remote: %(upstream:short)" refs/heads && echo --Remotes && git remote -v)); }; f' 

然后

 git track 

基于Olivier Refalo的回答

 if [ $# -eq 2 ] then echo "Setting tracking for branch " $1 " -> " $2 git branch --set-upstream $1 $2 else echo "-- Local --" git for-each-ref --shell --format="[ %(upstream:short) != '' ] && echo -e '\t%(refname:short) <--> %(upstream:short)'" refs/heads | sh echo "-- Remote --" REMOTES=$(git remote -v) if [ "$REMOTES" != '' ] then echo $REMOTES fi fi 

它只显示本地与轨道configuration。

把它写在一个名为git-track的脚本上,你将得到一个git track命令

https://github.com/albfan/git-showupstream上更详细的版本;