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

    文章

    4977

    浏览量

    74400
  • Git
    Git
    +关注

    关注

    0

    文章

    207

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MPO分支光缆:高密度光纤布线的核心组件

    在数据中心、通信网络和工业控制等高密度光纤布线场景中,MPO分支光缆凭借其模块化设计、高密度集成和灵活部署能力,已成为提升网络效率的关键组件。其通过单接口实现多芯光纤并行传输,显著简化了布线结构
    的头像 发表于 03-16 10:30 256次阅读

    嵌入式开发绕不开的版本管理工具——git

    Git是一个开源的分布式版本控制系统,由Linux之父Linus Torvalds于2005年用C语言开发,主要是为了帮助管理Linux内核开发而创建的一个开放源码的版本控制软件。Git与常用的版本
    的头像 发表于 01-30 16:47 1497次阅读

    关于MT6901的直线DEMO介绍

    关于MT6901的直线DEMO介绍
    的头像 发表于 01-30 10:54 807次阅读
    <b class='flag-5'>关于</b>MT6901的直线DEMO<b class='flag-5'>介绍</b>

    电缆接地箱与电缆分支箱区别与联系

    电缆接地箱和电缆分支箱是功能完全不同的两种电力设备。简单来说,接地箱是电缆的“安全卫士”,主要负责处理电缆金属护层的接地,防止感应电压危害;而分支箱则是电力的“交通枢纽”,主要负责电能的分配和转接。
    的头像 发表于 01-04 09:25 720次阅读
    电缆接地箱与电缆<b class='flag-5'>分支</b>箱区别与联系

    PLC远程控制不求人,手把手教你详细设置方法

    在现代工业自动化中,PLC远程控制功能越来越重要,尤其是在设备分布广泛或环境复杂的场景中。通过无线通信技术,可以实现PLC的远程控制,显著提高生产效率和运维便捷性。本文将详细介绍基于无
    的头像 发表于 12-24 11:36 426次阅读
    PLC<b class='flag-5'>远程</b>控制不求人,手把手教你<b class='flag-5'>详细</b>设置方法

    能否详细介绍一下MOSFET在电机控制中的作用是什么?

    能否详细介绍一下MOSFET在电机控制中的作用?
    发表于 12-22 13:11

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

    关于NFC镍锌铁氧体片的介绍
    的头像 发表于 12-04 10:52 576次阅读
    <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系列分享第四篇,本篇介绍的内容是系统链接脚本。 二、如何实现不同的下载模式? 实现三种不同的程序运行方式,可通过makefile的命令行指定不同的链接脚本,从而实现
    发表于 10-30 08:26

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

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

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

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

    基于全局预测历史的gshare分支预测器的实现细节

    GShare预测机制简介 GShare预测机制作为一种常用的分支预测机制,通过基于分支历史和分支地址来预测分支指令的执行路径。分支历史是指
    发表于 10-22 06:50

    CAN总线远程调试工具介绍

    一种工程机械领域调试上的创新产品,可用于Codesys 源程序的无线下载联机、远程调试、故障诊断、CAN 总线数据在线监控、透传收发、数据采集、数据分析、远程控制等各种 CAN 总线通讯的场景。
    发表于 10-17 16:14 0次下载

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

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