参见: 如何查看哪个Git分支正在跟踪哪个远程/上游分支?
如何知道本地分支正在跟踪哪个远程分支?
我是否需要解析git配置输出,或者是否有一个命令可以为我做这件事?
参见: 如何查看哪个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
}