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

如何知道本地分支正在跟踪哪个远程分支?

我是否需要解析git配置输出,或者是否有一个命令可以为我做这件事?


当前回答

git branch -vv | grep 'hardcode-branch-name'
# "git rev-parse --abbrev-ref head" will get your current branch name
# $(git rev-parse --abbrev-ref head) save it as string
#  find the tracking branch by grep filtering the current branch 
git branch -vv | grep $(git rev-parse --abbrev-ref head)

其他回答

更新:好吧,自从我发布这篇文章已经有好几年了!为了比较HEAD和上游,我现在使用@{u},这是一个指向上游跟踪分支的HEAD的快捷键。(见https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem)。

原来的答案:我也遇到过这个问题。我经常在一个存储库中使用多个遥控器,很容易忘记当前的分支正在跟踪哪个遥控器。有时候知道这个很方便,比如当你想通过git log remotename/branchname..HEAD查看你的本地提交。

所有这些东西都存储在git配置变量中,但是你不需要解析git配置输出。如果调用git配置时,后面跟着一个变量的名称,它将只打印该变量的值,不需要解析。考虑到这一点,这里有一些命令来获取有关当前分支跟踪设置的信息:

LOCAL_BRANCH=`git name-rev --name-only HEAD`
TRACKING_BRANCH=`git config branch.$LOCAL_BRANCH.merge`
TRACKING_REMOTE=`git config branch.$LOCAL_BRANCH.remote`
REMOTE_URL=`git config remote.$TRACKING_REMOTE.url`

在我的例子中,因为我只对找出当前遥控器的名称感兴趣,所以我这样做:

git config branch.`git name-rev --name-only HEAD`.remote

这是一个命令,给你所有的跟踪分支(配置为'pull'),请参阅:

$ git branch -vv
  main   aaf02f0 [main/master: ahead 25] Some other commit
* master add0a03 [jdsumsion/master] Some commit

您必须费力地浏览SHA和任何长包装提交消息,但它可以快速输入,并且我在第三列中垂直对齐跟踪分支。

如果你需要每个分支的“拉”和“推”配置的信息,请参阅git remote show origin上的另一个答案。


更新

从git 1.8.5版本开始,你可以用git status和git status -sb来显示上游分支

不使用grep只显示当前分支信息:

git branch -vv --contains

这是缩写:

git branch -vv --contains HEAD

如果你当前的HEAD的提交id在其他分支中,这些分支也会显示。

另一种简单的方法是使用

Cat .git/config在一个git回购

这将列出本地分支的详细信息

两个选择:

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

or

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