1、远程共享版本库包含的分支:
远程共享版本库中有四个分支,其中hello-1.x分支是开发者user1创建的。
2、将该远程版本库克隆到本地:
3、查看本地版本库的分支,本地只有一个分支master:
4、查看全部的本地引用:
其中,以refs/remotes/origin/为前缀,并且名称与远程版本库的分支名一一对应。这些引用实际是从远程共享版本库的分支复制过来的,成为远程分支。
5、也可以这样查看远程分支:
在克隆一个版本库时,会将远程分支都复制到目录.git/refs/remotes/origin/下。这样从不同的远程版本库执行获取操作时,避免在本地的相互覆盖。不是把远程版本库的分支原封不动的复制到本地版本库的分支中。
6、远程分支不是真正意义上的分支,是类似于里程碑一样的引用。不能针对远程分支执行检出命令:
检出会使得头指针HEAD处于分离头指针状态。除了以refs/heads为前缀的引用之外,如果检出其他引用,都将使工作区处于分离头指针状态。
分支追踪
为了能够在远程分支refs/remotes/origin/hello-1.x上进行工作,需要基于该远程分支创建本地分支。远程分支简写为origin/hello-1.x。
1、创建和切换本地分支
(也可使用命令 git checkout -b hello-1.x origin/hello-1.x)
这样就建立了本地分支与远程分支的跟踪。在和远程分支建立跟踪后,本地分支具有下列特征:
a、检出工作区状态时,会显示本地分支和被追踪远程分支提交之间的关系。
b、当执行git pull命令,会和被跟踪的远程分支进行合并(或变基)
c、当执行git push命令,会推送到远程版本库的同名分支中。
但是如果基于本地分支创建另外一个本地分支则没有分支跟踪功能。
1、从本地分支创建另一个本地分支:
2、将hello-jx重置后退2个版本,并查看状态,看不到跟踪信息
3、执行拉回操作,但是报错:
如果希望基于一个本地分支创建另一个本地分支也能够使用分支间的跟踪功能。可以使用–track参数:
1、删除之前创建的分支
2、使用–track参数,重新创建分支,此时就具有跟踪功能:
远程版本库
一、注册新的远程版本库
1、多创建几个共享的远程版本库(单机演示都是在本地一个文件夹中,可以看成是远程服务器上的):
2、在工作区中注册新的远程版本库(在同一个工作区中)
3、显示已经注册的远程版本库:
4、当前分支设置的默认远程版本库时origin,并不会从新增的版本库进行获取,需要添加new-remote参数
远程版本库的分支都复制到本地版本库前缀为new-remote的远程分支中。
5、查看远程分支:
二、更改远程版本库的地址
如果远程版本库的URL地址改变,可以通过手工修改config文件,也可以使用命令:
1、更换为新的版本库hello-user2.git:
2、可以为获取fetch或者推送push设置单独的URL:
三、修改远程版本库的名字
四、更新远程版本库:希望获取所有远程版本库的更新
某个版本库不想更新时,可以通过设置参数关闭自动更新功能:
六、删除远程版本库
PUSH与PULL操作和远程版本库
当不带任何参数执行git push 命令时,实际的执行过程是:
1、如果当前分支设置了<\remote> ,则不带参数执行git push相当于执行了git push <\remote>
2、如果没有为当前分支设置 <\remote>,则不带参数执行git push相当于执行了git push origin。
在本地新建分支中执行git push推送操作不会推送也不会报错,因为远程不存在同名分支,所以根本就没有对该分支进行推送。而如果本地其他分支在远程版本库有同名分支且本地包含更新的话,会对这些分支进行推送。
需要在远程版本库中创建分支,执行命令:git push <\remote> <\new_branch>。即通过将本地分支推送到远程版本库的方式在远程版本库中创建分支。但是拉回git pull操作会出错,没有建立本地分支与远程分支的追踪,无法将远程版本库中其他人推送的提交获取到本地。
关于不带参数执行git pull命令的解释:
1、如果为当前分支设置了<\remote>,则不带参数执行git pull相当于执行git pull <\remote>。
2、如果没有设置<\remote>,则相当于执行git pull origin。