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

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

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


当前回答

git branch -r -vv

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

其他回答

另一种简单的方法是使用

Cat .git/config在一个git回购

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

更新:好吧,自从我发布这篇文章已经有好几年了!为了比较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

还有另一种方法

git status -b --porcelain

这会给你

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

我不知道这是否算作解析git配置的输出,但这将确定master正在跟踪的远程服务器的URL:

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

如果你正在使用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
    }