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

也可以看看:
我怎样才能让git向我展示哪些分支正在跟踪什么?

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

我需要parsing的gitconfiguration输出,或者有一个命令,会为我做这个?

这是一个给你跟踪分支的命令:

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

你必须通过SHA和任何长时间提交的提交消息,但它很快input,我得到的跟踪分支在第三列垂直alignment。


更新

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

两个select:

 % 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-emltbranchnamegtupstreamemegemmasterupstreamememuem )。

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

所有这些东西存储在gitconfigurationvariables,但你不必parsing的gitconfiguration输出。 如果你调用了git config后跟一个variables的名字,它只会打印该variables的值,不需要parsing。 考虑到这一点,下面是一些命令来获取有关您当前分支的跟踪设置的信息:

 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` 

在我的情况下,因为我只想find我现在的遥控器的名字,所以我这样做:

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

当地的分支机构和他们的遥控器。

 git branch -vv 

所有分支和跟踪遥控器。

 git branch -a -vv 

查看本地分支明确configuration为推拉的位置。

 git remote show {remote_name} 

我不知道这是否parsinggit config的输出,但是这将决定主要跟踪的远程的URL:

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

这会告诉你你所在的分支:

 $ git branch -vv 

这将显示当前的分支:

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

例如:

 myremote/mybranch 

您可以find当前分支使用的远程 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 status -b --porcelain 

这会给你

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

你可以使用git checkout ,即“检查当前分支”。 对于当前分支来说,如果存在跟踪信息,这是一个没有操作的副作用。

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

将列出所有分支,包括远程。

另一个简单的方法是使用

cat .git/config在一个git仓库中

这将列出当地分行的详细信息

另一种方法(谢谢osse),如果你只是想知道它是否存在:

 if git rev-parse @{u} > /dev/null 2>&1 then printf "has an upstream\n" else printf "has no upstream\n" fi 

我使用EasyGit(又名“eg”)作为一个超级轻量级​​的包装在Git的顶端(或一侧)。 EasyGit有一个“info”子命令,可以为您提供各种超级有用的信息,包括当前分支机构的远程跟踪分支。 下面是一个例子(当前分支名称是“foo”):

 pknotz @ s883422:(foo)〜/ workspace / bd
 $ eg info
提交总数:175
本地存储库:.git
命名远程存储库:(名称 - >位置)
  起源 - > git://sahp7577/home/pknotz/bd.git
当前分支:foo
  密码校验和(sha1sum):bd248d1de7d759eb48e8b5ff3bfb3bb0eca4c5bf
  默认的拉/推存储库:起源
  默认的拉/推选项:
     branch.foo.remote =原点
     branch.foo.merge = refs / heads / aal_devel_1
  贡献者人数:3
  文件数量:28
  目录数量:20
  最大的文件大小,以字节为单位:32473(pygooglechart-0.2.0 / COPYING)
  提交:62

我使用这个别名

 git config --global alias.track '!sh -c " if [ \$# -eq 2 ] then echo \"Setting tracking for branch \" \$1 \" -> \" \$2; git branch --set-upstream \$1 \$2; else git for-each-ref --format=\"local: %(refname:short) <--sync--> remote: %(upstream:short)\" refs/heads && echo --URLs && git remote -v; fi " -' 

然后

 git track 

注意脚本也可以用来设置跟踪。

更多伟大的别名在https://github.com/orefalo/bash-profiles

如果你正在使用gradle,

“`

 def gitHash = new ByteArrayOutputStream() project.exec { commandLine 'git', 'rev-parse', '--short', 'HEAD' standardOutput = gitHash } def gitBranch = new ByteArrayOutputStream() project.exec { def gitCmd = "git symbolic-ref --short -q HEAD || git branch -rq --contains "+getGitHash()+" | sed -e '2,\$d' -e 's/\\(.*\\)\\/\\(.*\\)\$/\\2/' || echo 'master'" commandLine "bash", "-c", "${gitCmd}" standardOutput = gitBranch } 

“`

以下命令将远程起源当前叉指的是

git remote -v

为了添加远程path,

git远程添加源path名