找出本地分支正在跟踪的远程分支

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

如何找出本地分支正在跟踪哪个远程分支?

我需要解析git config输出,还是有一个命令可以帮我做到这一点?

答案

是一条命令,可为您提供所有跟踪分支(配置为 “拉”),请参见:

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

您必须仔细阅读 SHA 和所有长时间包装的提交消息,但是键入起来很快,我在第 3 列中将跟踪分支垂直对齐。

如果您需要每个分支上的'pull' 和'push' 配置信息,请参阅git remote show origin上的其他答案。


更新资料

从 git 版本 1.8.5 开始,您可以显示带有git statusgit status -sb的上游分支

两种选择:

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

要么

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

我认为git branch -av仅告诉您拥有哪些分支以及它们位于哪个提交,从而让您推断本地分支正在跟踪哪些远程分支。

git remote show origin明确告诉您哪些分支正在跟踪哪些远程分支。这是一个具有单个提交和一个名为abranch的远程分支的存储库的示例输出:

$ git branch -av
* abranch                d875bf4 initial commit
  master                 d875bf4 initial commit
  remotes/origin/HEAD    -> origin/master
  remotes/origin/abranch d875bf4 initial commit
  remotes/origin/master  d875bf4 initial commit

$ git remote show origin
* remote origin
  Fetch URL: /home/ageorge/tmp/d/../exrepo/
  Push  URL: /home/ageorge/tmp/d/../exrepo/
  HEAD branch (remote HEAD is ambiguous, may be one of the following):
    abranch
    master
  Remote branches:
    abranch tracked
    master  tracked
  Local branches configured for 'git pull':
    abranch merges with remote abranch
    master  merges with remote master
  Local refs configured for 'git push':
    abranch pushes to abranch (up to date)
    master  pushes to master  (up to date)

更新:嗯,自我发布此消息已有好几年了!为了将 HEAD 与上游进行比较,我现在使用@{u} ,这是一个指向上游跟踪分支的 HEAD 的快捷方式。 (请参阅https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmastermasterupstreamememuem )。

原始答案:我也遇到了这个问题。我经常在单个存储库中使用多个远程服务器,很容易忘记当前分支跟踪的是哪个远程服务器。有时很容易知道这一点,例如,当您想通过git log remotename/branchname..HEAD查看本地提交时。

所有这些东西都存储在 git config 变量中,但是您不必解析 git config 输出。如果您调用 git config 后接变量名,它将仅打印该变量的值,而无需进行解析。考虑到这一点,下面是一些命令来获取有关当前分支的跟踪设置的信息:

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

本地分支机构及其远程站点。

git branch -vv

所有分支机构和跟踪遥控器。

git branch -a -vv

查看本地分支在哪里显式配置用于推和拉。

git remote show {remote_name}

这将向您显示您所在的分支:

$ git branch -vv

这将显示当前分支您现在的位置:

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

例如:

myremote/mybranch

您可以找到所在的当前分支所使用的远程服务器的 URL:

$ git remote get-url $(git for-each-ref --format='%(upstream:short)' $(git symbolic-ref -q HEAD)|cut -d/ -f1)

例如:

https://github.com/someone/somerepo.git

您可以使用git checkout ,即 “签出当前分支”。这是一个没有副作用的操作,可以显示当前分支的跟踪信息(如果存在)。

$ git checkout 
Your branch is up-to-date with 'origin/master'.

我不知道这是否可以解析 git config 的输出,但这将确定 master 跟踪的远程 URL:

$ git config remote.$(git config branch.master.remote).url

另一种方式

git status -b --porcelain

这会给你

## BRANCH(...REMOTE)
modified and untracked files

另一种简单的方法是使用

git repo 中的cat .git/config

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