git命令以输出远程跟踪分支名称

20

我想要一个命令,它可以输出我当前所在分支的名称。类似于:

$ git checkout --track -b topic origin/master
Branch topic set up to track remote branch master from origin.
Switched to a new branch 'topic'
$ git unknown-command
origin/master

有这样的命令吗?

4个回答

23

根据Mark Longair的要求,我将我的前一条评论现在复制为答案。

在最近版本的git中,你可以使用git rev-parse --symbolic-full-name @{u}命令输出当前分支所追踪的远程分支的名称。它输出类似于refs/remotes/origin/master这样的东西。

如果你进一步使用--abbrev-ref标志,例如git rev-parse --symbolic-full-name --abbrev-ref @{u},它将去掉refs/remotes/部分,只留下短分支名称,例如origin/master


另一种方法是 % git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD),但我更喜欢你的。 - cdunn2001
发现了一个这个技巧不起作用的情况:我使用 git branch -m 重命名本地分支,然后推送它以创建一个新的远程分支;现在,在执行你的命令(git rev-parse --symbolic-full-name @{u})之后,返回的值是旧的分支名称(在本地分支重命名之前的远程分支),而我本来期望得到新的远程分支名称。 - MichaelMoser
2
@MichaelMoser:你已经重命名了本地分支并将其推送到了远程仓库,但是你没有更新上游跟踪信息。你可以使用 -u 标志来执行 git push 命令以更改上游跟踪信息。 - Lily Ballard
谢谢,这解释得很清楚。 - MichaelMoser

14

将会触发被追踪的远程操作:

git config branch.<branchname>.remote
将在该远程位置上跟踪的引用发出:
git config branch.<branchname>.merge

我不相信有一种组合命令可以同时发出两个命令(至少在正常的Git中没有,你总是可以自己创建一个)。


例如,对于本地master分支:

$ git config branch.master.remote
origin
$ git config branch.master.merge
refs/heads/master

9
在最近版本的git中,你可以使用git rev-parse --symbolic-full-name @{u}命令输出当前分支所对应远程跟踪分支的名称,它会输出类似于refs/remotes/origin/master的内容。如果忽略掉"refs/remotes"这部分内容,那么它正是所需的结果。 - Lily Ballard
@Kevin Ballard:你能把那个建议发表为一个新答案吗?我认为它非常有用,但目前还不够突出... - Mark Longair

5
git config --global alias.show-upstream '!sh -c '\''

    test -n "$1" || set -- HEAD
    set -- "$(git rev-parse --symbolic-full-name "$1")"
    git for-each-ref --format="%(upstream:short)" "$1"


'\'' -'

git show-upstream
git show-upstream HEAD
git show-upstream some/local/branch

3
自git 1.8.3版本以来,您现在可以这样做:
git branch -vv 

非常方便,因为它可以一次性显示所有本地分支的跟踪分支,但不适合脚本编写。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接