这是一个命令,为您提供所有跟踪分支(配置为"拉"),请参阅:
$ git branch -vv main aaf02f0 [main/master: ahead 25] Some other commit * master add0a03 [jdsumsion/master] Some commit
你必须浏览SHA和任何长包装提交消息,但是它可以快速输入,并且我会在第3列中垂直对齐跟踪分支.
如果您需要有关每个分支的"拉"和"推"配置的信息,请参阅另一个答案git remote show origin
.
更新
从git版本1.8.5开始,您可以使用git status
和显示上游分支git status -sb
这是一个命令,为您提供所有跟踪分支(配置为"拉"),请参阅:
$ git branch -vv main aaf02f0 [main/master: ahead 25] Some other commit * master add0a03 [jdsumsion/master] Some commit
你必须浏览SHA和任何长包装提交消息,但是它可以快速输入,并且我会在第3列中垂直对齐跟踪分支.
如果您需要有关每个分支的"拉"和"推"配置的信息,请参阅另一个答案git remote show origin
.
更新
从git版本1.8.5开始,您可以使用git status
和显示上游分支git 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-emltbranchnamegtupstreamemegemmasterupstreamememuem).
原始答案:我也遇到过这个问题.我经常在一个存储库中使用多个遥控器,很容易忘记当前分支跟踪的是哪一个.有时候知道这一点很方便,例如当你想看看你的本地提交时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
另一种简单的方法是使用
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
git branch -r -vv
将列出所有分支,包括远程.