找出本地分支正在跟踪的远程分支
也可以看看:
我怎样才能让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 status
和git 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
注意脚本也可以用来设置跟踪。
如果你正在使用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名