记录一下,工作中使用git的一些盲点,重新梳理出来,帮助准确操作远程的一些操作.....
附上学习链接[Git Book](Git - 远程分支 (git-scm.com))
远程分支在本地仓库是什么形式?
git在本地分支都是有指针引用进行标记分支最新的进展,而远程分支的进展就是通过远程引用,它是对远程仓库的引用(指针)。远程引用无法移动,但连网进行拉取之后,它们就会自动移动。
远程分支的形式:<remote>/<branch>
查看远程分支的两个命令: 1、git ls-remote <remote>
来显式地获得远程引用的完整列表 2、git remote show <remote>
获得远程分支的更多信息
产生链接远程分支的方式
产生的方式有两种:
1、克隆远程仓库 Git的clone
命令会自动创建一个指向master分支的指针,并命名为origin/master
,同时也会在本地指向与远程仓库同样位置。
由于普遍认识,因此分支通常为master,远程仓库名称为origin 可以通过git clone -o '远程仓库名',这个命令将会自定义远程仓库名称
2、添加远程仓库 通过git remote add
添加远程仓库,它会添加一个新的远程仓库引用到当前的项目,也就是会产生origin/master
这样类似的指针。
更新我们的远程引用
有时候需要同步团队进度,运行 git fetch <remote>
命令,更新本地数据库,移动 origin/master
指针这样的远程引用到更新之后的位置。
但是需要注意的是:抓取到新的远程跟踪分支时,本地不会自动生成一份可编辑的副本,只会在本地有一个不可以修改的origin/serverfix
指针。
这就意味着本地上是一个虚拟的,不能修改的标记,但是commit所有的内容都在里面。只能读到这块的修改。
因此当我们想从远程拉取下来一个本地上没有的分支需要新建一个分支,在这个新分支上进行git merge
命令合并远程引用,然后将本地修改的这样就可以进行编辑,最后再通过git push
命令提交到远程。
这里有一个快捷的命令,帮助我们快速的完成创建分支,并且合并到这个新分支上,建立在远程跟踪分支之上 git checkout -b '本地分支' '远程跟踪分支' = git checkout -b '本地分支' + git merge '远程跟踪分支'
此外,git push
命令我们还可以指定哪个本地分支推送到远程分支当中,例如:行 git push origin serverfix:awesomebranch
来将本地的 serverfix
分支推送到远程仓库上的 awesomebranch
分支。
拉取分支
拉取命令:git pull <remote> <branch>
。
git pull
= git fetch
+ git merge
有设置好的跟踪分支,不管它是显式地设置还是通过 clone
或 checkout
命令为你创建的,git pull
都会查找当前分支所跟踪的服务器与分支, 从服务器上抓取数据然后尝试合并入那个远程分支。
总结:所以当想从远程拉取下来一个本地上没有的分支的时候,不管是git pull
还是git fetch
,都需要新建一个分支,然后合并远程分支
跟踪分支
定义:从一个远程跟踪分支检出一个本地分支会自动创建所谓的"跟踪分支"(它跟踪的分支叫做"上游分支")。 跟踪分支是与远程分支有直接关系的本地分支。 如果在一个跟踪分支上输入 git pull
,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。
产生跟踪分支的命令: 1、git checkout -b sf origin/serverfix
,它会将本地分支与远程分支建立联系,也就是跟踪分支 2、git checkout --track origin/serverfix
,手动指定跟踪哪一个远程分支 3、git checkout serverfix
,当远程分支中刚好只有一个名字与其匹配,那么git
会自动进行跟踪
查看设置的所有跟踪分支命令: git branch -vv
,会列出每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。
注:这些领先、落后、都有的这些数值比较都是本地缓存的进行的,因此当要统计最新的,需要先
git fetch --all
删除远程分支
git push origin --delete serverfix
,这个命令做的只是从服务器上移除这个指针,比较容易恢复。