远程分支

远程引用是对远程仓库的引用(指针),包括分支、标签等等

你可以通过 git ls-remote <remote> 来显式地获得远程引用的完整列表

  1. polo@B-J5D1MD6R-2312 watermarker % git ls-remote
  2. From git@gitee.com:poloyy/watermarker.git
  3. 3fb14343217ff0725bbf68f9a1b5f36fa650548f HEAD
  4. 3fb14343217ff0725bbf68f9a1b5f36fa650548f refs/heads/master
  5. 7fa175dbc2a1ce3cec03033472abb894f1a94527 refs/tags/testbu
  6. 8be5ab723bc931dcae3cd9a2bccaca8b474e962b refs/tags/v1.1
  7. 9baca61910f4182075c753a4bb9eedba5af8cb02 refs/tags/v1.1

或者通过 git remote show <remote> 获得远程分支的更多信息

  1. polo@B-J5D1MD6R-2312 watermarker % git remote show origin
  2. * 远程 origin
  3. 获取地址:git@gitee.com:poloyy/watermarker.git
  4. 推送地址:git@gitee.com:poloyy/watermarker.git
  5. HEAD 分支:master
  6. 远程分支:
  7. master 已跟踪
  8. 'git pull' 配置的本地分支:
  9. master 与远程 master 合并
  10. 'git push' 配置的本地引用:
  11. master 推送至 master (最新)

远程跟踪分支

  • 远程跟踪分支是远程分支状态的引用
  • 一旦你进行了网络通信, Git 就会为你移动它们以精确反映远程仓库的状态
  • 该分支在远程仓库中的位置就是最后一次连接到它们的位置

命名格式

  1. <remote>/<branch>

查看最后一次与远程仓库 origin 通信时 master 分支的状态

  1. origin/master

你与同事合作解决一个问题并且他们推送了一个 iss53 分支,你可能有自己的本地 iss53 分支, 然而在服务器上的分支会以 origin/iss53 来表示

为何叫 origin?

  • giit clone 命令会给远程仓库默认命名为 origin,然后拉取它的所有数据, 创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master【远程分支 origin/master】
  • Git 也会给你一个与 origin 的 master 分支在指向同一个地方的本地 master 分支,这样你就有工作的基础【本地分支 master】

重点

  • origin 和 master 一样,没有特殊的含义
  • 只是 git init 时默认的起始分支名字取得就是 master
  • 而 git clone 默认给远程仓库名字取得就是 origin

假设指定远程仓库名字

  1. git clone -o booyah

那么默认的远程分支名字就是 booyah/master

克隆之后的远程仓库与本地仓库

  • 有人在 git.ourcompany.com 的 master 分支上 push 了新的提交
  • 而自己在本地的 master 分支上也做了提交但是没有 push
  • 只要本地不拉取最新的数据,那么本地的远程分支(origin/master)还是指向之前的 f4265 节点

本地与远程的工作可以分叉

将本地的远程仓库和服务器上的远程仓库同步数据

  1. git fetch <remote>
  2. git fetch origin
  • 这个命令查找 “origin” 是哪一个服务器(在本例中,它是 git.ourcompany.com
  • 从中拉取本地没有的数据,并且更新本地数据库
  • 移动 origin/master 指针到更新之后的位置

可以看到,因为本地的 master 分支已经有过新的提交,所以和 origin/master 远程分支处于分叉状态

git fetch 更新你的远程跟踪分支

现在有个新的 git 服务器位于 git.team1.ourcompany.com

当有多个远程仓库与远程分支的情况下,要怎么添加新的远程仓库引用到本地项目呢?

  1. git remote add <remote> <git 服务器 url

 

添加另一个远程仓库

抓取新添加的远程仓库在本地没有的数据

  1. git fetch teamone
  • 因为那台服务器上现有的数据是 origin 服务器上的一个子集,
  • 所以 Git 并不会抓取数据而是会设置远程跟踪分支 teamone/master 指向 teamone 的 master 分支。
 

推送至远程跟踪分支 teamone/master

推送本地指定分支的内容到指定的远程仓库下

  1. git push <remote> <branch>:

栗子

将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支

  1. git push origin serverfix:awesomebranch

下一次其他协作者从服务器上拉取数据时,他们会在本地生成一个远程分支 origin/serverfix,指向服务器的 serverfix 分支的引用:

  1. $ git fetch origin
  2. remote: Counting objects: 7, done.
  3. remote: Compressing objects: 100% (2/2), done.
  4. remote: Total 3 (delta 0), reused 3 (delta 0)
  5. Unpacking objects: 100% (3/3), done.
  6. From https://github.com/schacon/simplegit
  7. * [new branch] serverfix -> origin/serverfix

这样操作,本地不会自动新增一个 serverfix 分支,只是有一个不可修改的 origin/serverfix 指针

  1. git merge origin/serverfix

这也是将 origin/serverfix 远程分支下的内容合并到本地当前所在分支

  1. $ git checkout -b serverfix origin/serverfix
  2. Branch serverfix set up to track remote branch serverfix from origin.
  3. Switched to a new branch 'serverfix' 

这样可以在本地新建一个 serverfix 分支,并且和 origin/serverfix 远程分支指向同一个提交内容

跟踪分支

  • 从一个远程跟踪分支 checkout 一个本地分支会自动创建所谓的“跟踪tracking分支”(它跟踪的分支叫做“上游 upstream 分支”)
  • 跟踪分支是与远程分支有直接关系的本地分支
  • 如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支

-u 或 --set-upstream-to

将本地分支跟踪一个刚拉取下来的远程分支,或者修改正在跟踪的上游分支

  1. $ git branch -u origin/serverfix
  2. Branch serverfix set up to track remote branch serverfix from origin.

查看设置的所有跟踪分支

这会将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。

  1. $ git branch -vv
  2. iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
  3. master 1ae2a45 [origin/master] deploying index fix
  4. * serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
  5. testing 5ea463a trying something new
  • iss53 分支正在跟踪 origin/iss53 并且 “ahead” 是 2,本地有两个提交还没有推送到服务器上【领先两个提交】
  • master 分支正在跟踪 origin/master 分支并且是最新的【 [] 里面没有其他提示】
  • serverfix 分支正在跟踪 teamone 服务器上的 server-fix-good 分支并且领先 3 落后 1,服务器上有一次提交还没有合并入同时本地有三次提交还没有 push
  • testing 分支并没有跟踪任何远程分支【没有 [] 】

重点注意

  • git branch -vv 显示的值来自每个服务器最后一次拉取数据(git fetch)
  • 这个命令并没有连接服务器,它显示本地缓存的服务器数据
  • 如果想要统计最新的 ahead 与 behind 数字,可以先拉取所有服务器的最新数据
  1. git fetch --all
  2. git branch -vv

拉取

git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容,它只会获取数据然后让你自己合并

git pull 命令等价于

  1. git fetch
  2. git merge

删除远程分支

当某个远程分支已经做完所有工作,且把该分支的内容合并到了 master 分支(或其他稳定版本分支),就要删除不再需要的远程分支

  1. $ git push origin --delete serverfix
  2. To https://github.com/schacon/simplegit
  3. - [deleted] serverfix
  • 基本上这个命令做的只是从服务器上移除这个指针
  • Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的

Git 系列教程(14)- 远程分支的更多相关文章

  1. Git 系列教程(9)- 打标签

    打标签 一般会给提交历史打个标签,方便后续进行筛选.查看 列出标签 可带上可选的 -l 选项 --list $ git tag v1.0 v2.0 这个命令以字母顺序列出标签 可以按照特定的模式查找标 ...

  2. [译]Atlassian Git系列教程

    国庆期间把Atlassian的Git系列教程看完了.边看边翻译了相关文章. 原教程: https://www.atlassian.com/git/tutorials/ 我翻译的: git init g ...

  3. git创建和删除远程分支

    问题描述:           使用git创建和删除远程分支 问题解决:              (1)git创建本地分支 注:            如上所示,使用命令 git branch -a ...

  4. git 使用命令删除远程分支和本地分支

    删除远程分支命令: git push origin   :<远程分支名称> git push origin --delete <远程分支名称> 删除本地分支: git bran ...

  5. Git查看、删除远程分支和tag

    本站文章除注明转载外,均为本站原创或者翻译. 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商: 本站部分原创和翻译文章提供markdown格式源码,欢迎使 ...

  6. 【Git】无法从远程分支pull

    随着工作量的增多,接触的新项目,新同事越来越多,发现自己不会的东西好多.有这么一句话:“你所知道的知识就像是一个圆,你会的越多,圆越大,但你接触的未知世界也越大,也就越加觉得自己无知”.原话记不全了, ...

  7. git创建与管理远程分支【转】

    本文转载自:http://blog.chinaunix.net/uid-9398085-id-3164754.html git创建与管理远程分支 1.远程分支就是本地分支push到服务器上的时候产生的 ...

  8. GIT实践:同步远程分支

    GIT实践:同步远程分支 克隆远程仓库对应分支 克隆时指定分支,语法为:git clone -b 分支名 远程地址. 同步远程分支 更新远程分支 当Git仓库地址发生变化后,首先更新远程地址 git ...

  9. [Git高级教程(二)] 远程仓库版本回退方法 - 梧桐那时雨 - CSDN博客

    1 简介 最近在使用git时遇到了远程分支需要版本回滚的情况,于是做了一下研究,写下这篇博客. 2 问题 如果提交了一个错误的版本,怎么回退版本? 如果提交了一个错误的版本到远程分支,怎么回退远程分支 ...

  10. git本地检出远程分支

    场景:本地分支被误物理删除,想要重新将自己的分支代码从远程拉取下来.(此时取的是最后一次git push上去的分支代码) 1.与远程仓库重新建立关系 1 git clone git@gitlab.名称 ...

随机推荐

  1. RocketMq(一)初识

    消息中间件基本上是互联网公司必用的一个中间件,为什么要使用MQ,当然是因为能给我们的系统带来很多好处. 消息队列简单来说是一种先进先出的数据结构,先简单认识下. 一.应用场景 消息中间件主要应用场景主 ...

  2. 设计原则:接口隔离原则(ISP)

    接口隔离原则的英文是Interface Segregation Principle,缩写就是ISP.与里氏替换原则一样其定义同样有两种 定义1: Clients should not be force ...

  3. 基本dos命令

    Dos命令 打开cmd方法 开始---windows系统---命令提示符 win键 + R键 输入cmd --- 回车 按住Shift键---右击任意文件夹-----单击在此处打开PowerShell ...

  4. 如何在C或C++代码中嵌入ARM汇编代码

    转载自:http://blog.csdn.net/roland_sun/article/details/42921131 大家知道,用C或者C++等高级语言编写的程序,会被编译器编译成最终的机器指令. ...

  5. 基于防火墙的VRRP技术--华为防火墙双机热备--VGMP

    目录 主备备份双机热备配置 负载分担双机热备配置 为了解决多个VRRP备份组状态不一致的问题,华为防火墙引入VGMP(VRRP Group Management Protocol)来实现对VRRP备份 ...

  6. Python中面向对象和类

    目录 面向对象 类的定义 类的访问 类的属性和方法 继承和多态 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的. 面向对象: 类(C ...

  7. Tomcat容器、JSP和Servlet

    目录 JSP Tomcat.JSP和Servlet JSP JSP全名为Java Server Pages,其根本是一个简化的Servlet设计.JSP技术有点类似ASP技术,它是在传统的HTML网页 ...

  8. LA3644简单并查集判环

    题意:       有n个化合物,每个化合物是两种元素组成,现在要装车,但是一旦车上的化合物中的某几个化合物组成这样一组关系,有n个化合物正好用了n中元素,那么就会爆炸,输入的顺序是装车的顺序,对于每 ...

  9. Shiro反序列化漏洞复现

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.使用Shiro的易于理解的API,可以快速.轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企 ...

  10. Ext.MessageBox.alert()弹出对话框详解

    Ext.MessageBox是一个工具类,他继承自Obiect对象,用来生成各种风格的信息提示对话框,Ext.Msg是该类的别名,使用Ext.MessageBox和用Ext.Msg效果是一样的,而后者 ...