远程引用是对远程仓库的引用(指针),包括分支、标签等。通过git ls-remote (remote) 可以显式的获得远程引用的完整列表,或者通过git remote show (remote) 获得远程分支的更多信息。
增加远程分支
现在可以运行git fetch teamone 抓取远程仓库teamone有而本地没有的数据。因为,teamone服务器上的现有数据是origin服务器上的子集,所以Git不会抓取数据而是会设置远程跟踪分支teamone/master 指向teamone的master分支。

推送到远程分支
当想要公开分享一个分支时,需要将其推送到有写入权限的远程仓库。本地的分支并不会自动与远程仓库同步,必须显式的推送想要分享的分支。这样,就可以将不愿意分享的内容放到私人分支,而将需要和别人协作的内容推送到公开分支。
如果希望和别人一起在名为serverfix的分支工作,可以推送
$ git push origin serverfix
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
* [new branch] serverfix -> serverfix
下一次其他协作者从服务器上抓取数据时,就会在本地生成一个远程分支origin/serverfix 指向服务器的serverfix分支的引用
$ git fetch origin
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0)
Unpacking objects: 100% (3/3), done.
From https://github.com/schacon/simplegit
* [new branch] serverfix -> origin/serverfix
当抓取到新的远程跟踪分支时,本地不会自动生成一份可编辑的副本。此时,可以git merge origin/serverfix 合并到当前分支。
或者是,建立serverfix分支,使其建立在远程跟踪分支之上
$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
跟踪分支
从一个远程跟踪分支检出一个本地分支会自动创建“跟踪分支”。跟踪分支是与远程分支直接关联的本地分支。如果在一个跟踪分支上输入git pull ,git会自动识别从哪个服务器上抓取、合并到哪个分支。
当克隆仓库时,它通常会自动创建一个跟踪origin/master 的master分支,也可以设置其他的跟踪分支
git checkout -b [branch] [remotename]/[branch]
git提供--track的快捷方式
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
如果本地分支与远程分支设置为不同名字
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'
设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支,可以使用-u或--set-upstream-to 运行git branch 显式设置
$ git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
如果要查看设置的所有跟踪分支
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
testing 5ea463a trying something new
iss53分支正在跟踪origin/iss53 ,并且ahead是2,意味着本地有2个提交没有推送到服务器。
master分支正在跟踪origin/master ,且是最新的。
serverfix分支正在跟踪teamone服务器的server-fix-good分支,并且ahead是3,behind是1,意味着服务器上有一次提交没有合并,同时本地有3次提交没有推送。
testing没有跟踪任何远程分支。
如果想要统计最新的领先于落后数字,需要在运行上面命令前抓取所有的远程仓库
git fetch --all; git branch -vv
拉取
git fetch 会从服务器抓取本地没有的数据,它并不会修改工作目录的内容,它只会获取数据然后让你自己合并。
而git pull 大多数情况下的含义是git fetch 然后git merge 。
删除远程分支
可以运行带有--delete选项的git push 命令删除一个远程分支。
$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
- [deleted] serverfix