我想知道是否有办法判断 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
,但我发现直接访问比过滤当前分支的输出更简单一些。