远程引用是对远程仓库的引用(指针),包括分支、标签等。通过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

results matching ""

    No results matching ""