如何判断 Git 中哪个本地分支正在跟踪哪个远程分支?

如何判断 Git 中哪个本地分支正在跟踪哪个远程分支?

我想知道是否有办法判断 Git 中哪个本地分支正在跟踪哪个远程分支。

我正在使用一个名为“origin”的远程服务器。

答案1

使用从 Github.com 上的上游 Git 存储库中签出的 Puppet 副本作为示例...

$ git remote show origin
* remote origin
  Fetch URL: git://github.com/reductivelabs/puppet.git
  Push  URL: git://github.com/reductivelabs/puppet.git
  HEAD branch: master
  Remote branches:
    0.24.x                 tracked
    0.25.x                 tracked
    2.6.x                  tracked
    master                 tracked
    next                   tracked
    primordial-ooze        tracked
    reins-on-a-horse       tracked
    testing                tracked
    testing-17-march       tracked
    testing-18-march       tracked
    testing-2-april        tracked
    testing-2-april-midday tracked
    testing-20-march       tracked
    testing-21-march       tracked
    testing-24-march       tracked
    testing-26-march       tracked
    testing-29-march       tracked
    testing-31-march       tracked
    testing-5-april        tracked
    testing-9-april        tracked
    testing4268            tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

然后如果我执行以下操作:

$ git checkout -b local_2.6 -t origin/2.6.x 
Branch local_2.6 set up to track remote branch 2.6.x from origin.
Switched to a new branch 'local_2.6'

最后再次重新运行该git remote show origin命令,我将在底部看到以下内容:

  Local branches configured for 'git pull':
    local_2.6 merges with remote 2.6.x
    master    merges with remote master

答案2

对于所有分支机构:

git branch -avv

仅限当地分支机构:

git branch -lvv

仅适用于远程分支:

git branch -rvv

显示所有分支以及上游分支的名称。

答案3

Jeremy Bouse 说明如何git remote show显示跟踪信息。如果您只想获取供人类消费的信息,这就足够了。

如果你计划在自动化环境中使用这些信息(例如脚本),那么你应该使用较低级别的(“管道”)git for-each-ref反而。

% git remote show origin
* remote origin
  Local branches configured for 'git pull':
    master merges with remote master
    pu     merges with remote pu
% git for-each-ref --format='%(refname:short) <- %(upstream:short)' refs/heads
master <- origin/master
pu <- origin/pu

git for-each-ref%(upstream)Git 1.6.3使用早期版本的 Git,您必须使用git config branch.<name>.remote和提取跟踪信息git config branch.<name>.merge(可能使用git for-each-ref为每个本地分支名称构建命令)。

答案4

我使用以下 shell 脚本(名为git-tracks)来显示当前分支跟踪的远程分支:

#!/bin/sh -e
branch=$(git symbolic-ref HEAD)
branch=${branch##refs/heads/}
remote=$(git config "branch.${branch}.remote")
remoteBranch=$(git config "branch.${branch}.merge")
remoteBranch=${remoteBranch##refs/heads/}

echo "${remote:?}/${remoteBranch:?}"

这也可以使用提到的git for-each-ref,但我发现直接访问比过滤当前分支的输出更简单一些。

相关内容