我怎样才能让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命令