2010-09-21 95 views
20

我想要一个命令发出我所在分支的跟踪分支的名称。例如:git命令发出远程跟踪分支的名称

$ 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 

有没有这样的命令?

回答

15

会发出远程被跟踪:

git config branch.<branchname>.merge 

我不相信有一个联合命令,将同时发射:

git config branch.<branchname>.remote 

会发出裁判远程对被跟踪一起(至少在正常的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”位,这正是要求的。 – 2010-09-22 03:19:30

+0

好的提示凯文。 :) – Amber 2010-09-22 05:41:28

+0

@Kevin Ballard:你可以发布这个建议作为一个新的答案吗?这是非常有用的,目前还不够突出,我认为... – 2011-04-22 12:05:44

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 
22

按照马克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

+0

另一种方式是'%git for-each-ref --format ='%(upstream:short)'$( git symbolic-ref -q HEAD)',但我更喜欢你的。 – cdunn2001 2012-03-17 19:44:46

+0

发现了这种技巧无法工作的场景:我用git branch -m重命名本地分支,然后按下它以创建一个新的远程分支;现在之后,你的命令(git rev-parse --symbolic-full-name @ {u})返回的值就是旧的分支名称(重命名本地分支之前的远程分支) - 我预料到新的远程分支的名称。 – MichaelMoser 2014-05-29 08:22:57

+2

@MichaelMoser:你重命名了本地分支并推送它,但是你没有更新上游跟踪信息。您可以使用'-u'标志来'git push'来更改上游跟踪信息。 – 2014-05-30 16:58:46

2

正如吉特1.8.3你现在可以这样做:

git branch -vv 

非常方便,因为它显示了在一旦所有地方分公司的跟踪分支,但它是不适合的脚本。