0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于git的远程分支的详细介绍

454398 来源:itpub技术栈 作者:chengycz 2020-10-11 10:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

不知道大家有没有经历过,当我们切换到了一个新的分支想要提交代码的时候,总会遇到这样的错误。

我们把日志里的英文翻译过来是说,我们当前的分支没有设置任何上游分支。然后git提示我们可以运行下面这行代码来设置远程的上游,这样我们就可以push成功了。

当然如果我们push的时候执行的不是git push,而是后面再加上origin的话,就可以push成功了。比如这样:

那么这是什么原因呢?这个origin分支又是什么意思呢?我们今天就来讨论一下这个问题。

远程分支

远程分支其实就是远程代码仓库当中的分支,比如我们的repo如果是存在github的,那么这个远程仓库就是github,如果是存在gitlab的,那么这个仓库就是gitlab,如果是其他的仓库也是一样的道理。

当我们在使用git clone的时候,git会自动地将这个远程的repo命名为origin,拉取它所有的数据之后,创建一个指向它master的指针,命名为origin/master,之后会在本地创建一个指向同样位置的指针,命名为master,和远程的master作为区分。

也就是说,origin的含义指的是远程的仓库。它只是一个标记,就和默认分支叫做master一样,本身并没有特别的含义。如果我们愿意也可以起其他的名字,但是一般没有人这么干。比如我们在clone的时候可以添加一个参数-o给远程的repo起一个别名:

git clone -o chengzhi

这样一来,远程的这个repo就会被命名为chengzhi,代替原本的origin。但是这样除了装逼和增加成本之外,没有任何用处,不推荐这么干。

操作命令

还记得我们之前在介绍git的时候曾经说过远程repo的作用,就是为了防止本地的代码错乱,所以在远程留一份备份。这样即使我们的代码完蛋了,至少还可以找到备份。

所以远程的repo最大的作用就是保留备份,既然要保留备份,那么我们本地和远程的代码交互肯定是免不了的。大家可能都大概知道git pull从远程拉取,git push推送到远程,但是对于这其中的细节可能不太清楚。之前没有详细介绍过远程分支,所以也没办法深入,我们今天刚好聊到这个话题,正好好好说道说道。

代码拉取

我们先说代码拉取,说到代码拉取大家的第一反应可能是git pull。但是其实git pull并不是严格意义上的代码拉取命令,至少它还不是最细粒度,其实还有一个比git pull更加细粒度的操作。它就是——git fetch。

实际上git fetch才是真正的代码拉取的操作,它的作用是将远程的改动同步到本地。当我们执行git fetch origin的时候,这里的origin指的是远程的名字,如果你有多个远程的话要指定的话需要加上,否则可以不写。它会把远程所有的改动和分支都拉取到本地,命名为origin/xxx。origin的分支我们用git branch是看不到的,它只能看到本地的分支名,如果想要查看可以使用git branch -r。

当我们使用git checkout切换过去的时候,可以不必加上origin,git会自动生成一个本地的分支指针,也指向同样的节点。它相当于我们执行了git checkout -b test origin/test。说到这里就需要提一下git pull和git fetch的区别了,这两者从表面上来看都是拉取远程的改动。但是两者针对的范围不同,git fetch针对远程的所有改动,而git pull只针对当前分支对应的远程分支。另外git pull执行之后会将远程的改动merge到本地的分支,也就是说它其实多了一步merge的操作。

代码推送

说到代码推送回到了我们开头的那个问题,什么情况下git push就可以,什么情况下需要加上origin呢?

这里涉及一个机制就是本地的分支是不会自动和远程同步的,比如远程有人创建了一个test分支,我们拉取到本地会叫做origin/test。我们也可以自己创建一个test分支,和它井水不犯河水。这也是为了方便,如果直接用名称映射的话,可能会有潜在的冲突。并且由于可能会存在多个远程repo,所以我们push的时候也会有多种选择。

最完整的push命令是应该写成这样的:

git push origin test:cz/test

我们注意到这里用了一个奇怪的写法test:cz/test,它的意思是说将本地的test分支推送到远程作为cz/test分支。如果我们想要本地的名称和远程一样,我们可以省略简写成:git push origin test。

如果我们设置过当前test分支的上游是远程的test,或者本地的test就是从origin拷贝过来的,那么我们可以直接git push,它会自动将本地的分支与远程关联上,会方便很多。实际上我们大多数的push操作都是这么进行的。将本地分支和远程建立映射可以使用这个命令:

git branch --set-upstream-to master origin/master

它表示的是将本地的master和远程的master进行关联,设置过关联之后我们只需要git push和git pull就可以更新和推送这个分支了,会方便很多。

关于远程分支还有一些内容我们没有涉及,比如如何跟踪远程的分支,如何删除等等。由于这些内容几乎用不到,我们即使强行记住了到时候也会忘记,所以就不多赘述了。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73145
  • Git
    Git
    +关注

    关注

    0

    文章

    205

    浏览量

    16778
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    关于NFC镍锌铁氧体片的介绍

    关于NFC镍锌铁氧体片的介绍
    的头像 发表于 12-04 10:52 42次阅读
    <b class='flag-5'>关于</b>NFC镍锌铁氧体片的<b class='flag-5'>介绍</b>

    C语言的分支结构介绍

    1.简单if语句 C语言中的分支结构语句中的if条件语句。 简单if语句的基本结构如下: 代码语言:javascript if(表达式) { 执行代码块; } 其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。 注意:if()后面没有分号,直接写{}
    发表于 11-25 07:48

    蜂鸟E203简单分支预测的改进

    1.蜂鸟E203的原有分支预测 蜂鸟E203处理器为了能够连续不断的取指令,需要在每个时钟周期都能生成一条待取的指令。因此,在取指令的阶段,IFU单元模块进行了简单的译码处理,用以判别
    发表于 10-24 07:45

    提高条件分支指令预测正确率的方法

    基于全局分支历史的ghare分支预测器 主要构成 分支目标缓冲器BTB 分支历史寄存器BHR 方式历史寄存器PHT 对于某个条件分支指令
    发表于 10-22 08:22

    主流版本控制工具Git vs Perforce P4:架构模式、性能、大文件管理及分支管理对比详解

    Git vs Perforce P4,如何选型?架构模式、性能、大文件管理、分支策略四大维度对比,帮你全面了解两者的核心差异,选择更合适你团队需求的版本控制系统。
    的头像 发表于 06-13 14:52 579次阅读
    主流版本控制工具<b class='flag-5'>Git</b> vs Perforce P4:架构模式、性能、大文件管理及<b class='flag-5'>分支</b>管理对比详解

    设备远程维护如何实现?远程维护平台的功能特点

    随着工业智能化和数字化转型的快速推进,设备远程维护已成为企业提升运营效率、降低维护成本的重要手段。通过远程维护平台,企业能够实时监控设备状态,快速响应故障,实现设备的高效管理和维护。本文将详细探讨
    的头像 发表于 02-21 15:50 1127次阅读
    设备<b class='flag-5'>远程</b>维护如何实现?<b class='flag-5'>远程</b>维护平台的功能特点

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-移植前准备之git管理内核源码

    我们前边已经介绍Git工具,是一个非常实用的代码管理工具。如果验证编译出的内核能够正常启动,就可以将源码用git工具管理起来。可以清楚的了解源码改动记录。如果不小心把源码改乱了还可以进行版本
    发表于 01-23 10:51

    飞凌嵌入式ElfBoard ELF 1板卡-移植前准备之git管理内核源码

    我们前边已经介绍Git工具,是一个非常实用的代码管理工具。如果验证编译出的内核能够正常启动,就可以将源码用git工具管理起来。可以清楚的了解源码改动记录。如果不小心把源码改乱了还可以进行版本
    发表于 01-22 10:39

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作

    当工作区的文件可能在某一阶段用于两个项目,之后做不同修改时,就可以在该阶段切出新的分支,分别进行管理。当前分支以刚搭建好的git仓库为例,刚搭建完的仓库只有master分支,使用
    发表于 01-21 14:32

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之当前分支内的操作

    以刚搭建好的git仓库为例,刚搭建完的仓库只有master分支,使用git branch查看当前的分支情况。elf@ubuntu:~/work/example/hello$
    发表于 01-20 09:50

    飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之分支间的操作

    当工作区的文件可能在某一阶段用于两个项目,之后做不同修改时,就可以在该阶段切出新的分支,分别进行管理。当前分支以刚搭建好的git仓库为例,刚搭建完的仓库只有master分支,使用
    发表于 01-20 09:38

    谁能详细介绍一下track-and-hold

    在运放和ADC芯片的数据手册中经常看到track-and-hold,谁能详细介绍一下track-and-hold?
    发表于 01-20 09:10

    飞凌嵌入式ElfBoard ELF 1板卡-本地仓库管理之当前分支内的操作

    以刚搭建好的git仓库为例,刚搭建完的仓库只有master分支,使用git branch查看当前的分支情况。 elf@ubuntu:~/work/example/hello$
    发表于 01-18 10:25

    飞凌嵌入式ElfBoard ELF 1板卡-git管理源码之git安装和使用

    分两种方式,一种是管理当前的代码,给当前代码创建一个git仓库,这种需要初始化新仓库;还有一种是用clone克隆一个远程仓库到自己当前目录下,这种适合一群人维护一个仓库,也是常见的方式。本文只介绍
    发表于 01-14 09:08

    云服务器 Flexus X 实例:部署 Gitea,拥有自己的 Git 仓库,管理本地代码

    、零售、金融、游戏等众多领域的通用工作负载需求。本文旨在详细阐述如何高效利用“云服务器 Flexus X 实例”,包括如何在其中从零开始,通过安装相关依赖、安装 Docker、安装 Gitea 等步骤,实现自己的 Git 仓库,管理本地代码。精彩内容,不容错过,快来一探究
    的头像 发表于 01-07 16:59 751次阅读
    云服务器 Flexus X 实例:部署 Gitea,拥有自己的 <b class='flag-5'>Git</b> 仓库,管理本地代码