GIT学习笔记(4):远程分支
远程分支
远程分支是什么
远程分支是对远程仓库中的分支的索引。它们是一些无法移动的本地分支;只有在GIT进行网络交互时才会更新。远程分支就是书签,提醒着你上次连接远程仓库是上面各分支的位置。
我们用 (远程仓库名)/(分支名)
这样的形式表示远程分支。我们来举一个例子,假如你从GITHUB上克隆了一个项目到本地,GIT会自动为你将次远程仓库命名为origin,并且下载其中的所有数据,建立一个指向它的master分支的指针,在本地命名为origin/master,但是你无法在本地更改其数据,所以Git建立了一个属于你自己的本地的master分支,始于origin上master分支相同的位置,你可以就此开始工作。
说明:我们再来总结一下, 一次 Git 克隆会建立你自己的本地分支 master 和远程分支 origin/master,并且将它们都指向
origin
上的master
分支。
你可以沿着本地master分支做一些改动,但是只要你不和服务器通讯,你的 origin/master
指针仍然保持原位不会移动。
同步远程服务器的最新数据
可以运行 git fetch origin
来同步远程服务器上的数据到本地。该命令首先找到 origin
是哪个服务器,从上面获取你尚未拥有的数据,更新你本地的数据库,然后把 origin/master
的指针移到它最新的位置上。
git fetch 与 git pull
git pull
命令用于从另一个存储库或本地分支获取并集成(整合)。
如上所示,当我们执行git pull 以后会生成一个新的版本,他由远程分支和本地分支merge而来,相当于是从远程获取最新版本并merge
到本地。
如果使用fetch的话,还需要配合merge命令
$ git fetch origin develop-pubcloud
$ git diff tmp
$ git merge tmp
推送本地分支
要想和其他人分享某个本地分支,你需要把它推送到一个你拥有写权限的远程仓库。你创建的本地分支不会因为你的写入操作而被自动同步到你引入的远程服务器上,你需要明确地执行推送分支的操作。换句话说,对于无意分享的分支,你尽管保留为私人分支好了,而只推送那些协同工作要用到的特性分支。
如果你有个叫 serverfix
的分支需要和他人一起开发,可以运行 git push (远程仓库名) (分支名)
:(远程分支名)
$ git push origin serverfix
Counting objects: 20, done.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (15/15), 1.74 KiB, done.
Total 15 (delta 5), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new branch] serverfix -> serverfix
说明:也可以运行
git push origin serverfix:serverfix
来实现相同的效果,它的意思是“上传我本地的 serverfix 分支到远程仓库中去,仍旧称它为 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'
这会切换到新建的 serverfix
本地分支,其内容同远程分支 origin/serverfix
一致,这样你就可以在里面继续开发了。
跟踪远程分支
从远程分支 checkout
出来的本地分支,称为 跟踪分支 (tracking branch)。跟踪分支是一种和某个远程分支有直接联系的本地分支。在跟踪分支里输入 git push
,Git 会自行推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支里运行 git pull
会获取所有远程索引,并把它们的数据都合并到本地分支中来。
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'
说明:如果本地分支同远程分支同名,可以使用简易写法:
$ git checkout --track origin/serverfix
删除远程分支
如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master
分支(或任何其他存放稳定代码的分支),可以用这个非常无厘头(直观语意很模糊)的语法来删除它:git push [远程名] :[分支名]
。如果想在服务器上删除 serverfix
分支,运行下面的命令:
$ git push origin :serverfix
To git@github.com:schacon/simplegit.git
- [deleted] serverfix
咚!服务器上的分支没了。你最好特别留心这一页,因为你一定会用到那个命令,而且你很可能会忘掉它的语法。有种方便记忆这条命令的方法:记住我们不久前见过的 git push [远程名] [本地分支]:[远程分支]
语法,如果省略 [本地分支]
,那就等于是在说“在这里提取空白然后把它变成[远程分支]
”。