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

    文章

    4801

    浏览量

    68735
  • Git
    Git
    +关注

    关注

    0

    文章

    201

    浏览量

    15783
收藏 人收藏

    评论

    相关推荐

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

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

    详细的注塑成型工艺介绍

    详细的注塑成型工艺介绍
    的头像 发表于 11-27 09:58 196次阅读
    <b class='flag-5'>详细</b>的注塑成型工艺<b class='flag-5'>介绍</b>

    远程操作电脑的方法有哪些?

    随着远程办公、远程技术支持和跨地域协作的需求不断增加,远程操作电脑的方法也越来越多样化。无论是个人用户还是企业,选择合适的远程控制方法,可以大大提高工作效率。本文将
    的头像 发表于 09-12 08:11 466次阅读
    <b class='flag-5'>远程</b>操作电脑的方法有哪些?

    《DNK210使用指南 -CanMV版 V1.0》第五章 编译CanMV固件

    的使用介绍不是本教程文档的重点,请读者在使用中遇到问题时,善用搜索引擎。 5.3 编译CanMV源码关于CanMV源码的编译,建议读者先详细阅读CanMV仓库下的build.md文档。编译CanMV源码前
    发表于 09-07 10:56

    Mac 上好用的远程桌面软件推荐

    专业远程桌面软件,如Splashtop。本篇文章将详细介绍这两种方案,并分析各自的优缺点,帮助你选择最适合的远程控制工具。方案一:使用操作系统自带的
    的头像 发表于 08-30 13:20 415次阅读
    Mac 上好用的<b class='flag-5'>远程</b>桌面软件推荐

    windows11 远程连接工具

    随着远程办公的普及,选择合适的远程桌面工具变得尤为重要。在Windows11上,用户可以利用系统自带的远程桌面功能,或选择更专业的第三方解决方案,如Splashtop。本文将详细
    的头像 发表于 08-06 08:37 381次阅读
    windows11 <b class='flag-5'>远程</b>连接工具

    ubuntu下的vscode插件安装idf时,总是找不到git,为什么?

    总是提示:Git is not found in current environment 但是我已经在setting.json下设置了\"git.path\": \"/bin/git\" 同行,命令行里查看
    发表于 06-21 07:16

    远程模块连接PLC的方法

    的输入输出能力,还提高了系统的灵活性和可维护性。本文将详细介绍远程模块连接PLC的方法,包括连接方式的确定、通信参数的配置、物理连接的建立、连接测试以及远程访问权限的配置等步骤,旨在为
    的头像 发表于 06-15 15:40 2256次阅读

    Git发布新版本 修补五处安全漏洞 包含严重远程代码执行风险

    CVE-2024-32002漏洞的严重性在于,黑客可通过创建特定的Git仓库子模块,诱骗Git将文件写入.git/目录,而非子模块的工作树。如此一来,攻击者便能在克隆过程中植入恶意脚本,用户几乎无法察觉。
    的头像 发表于 05-31 10:09 620次阅读

    关于Profinet远程IO模块的超详细讲解

    什么是Profinet远程IO模块 Profinet是新一代基于工业以太网技术的自动化总线标准,它为自动化通信领域提供了一个完整的网络解决方案,用于连接远程输入输出(IO)设备到Profinet网络
    的头像 发表于 05-28 16:09 1546次阅读
    <b class='flag-5'>关于</b>Profinet<b class='flag-5'>远程</b>IO模块的超<b class='flag-5'>详细</b>讲解

    飞凌ElfBoard ELF 1板卡-ubuntu18.04 git安装及基本使用

    git commit -m xxx(xxx代表备注信息) 6.查看提交记录git log 7.查看分支git branch 添加新的分支
    发表于 03-21 16:23

    蓝牙 | 软件:Git管理高通的ChipCode项目

    最近发现大家在高通chipcode网站上下载不了代码,小编一直使用git的方式获取新版本代码,没有遇到什么阻碍。于是小编到新主机上尝试下载代码的压缩包和git代码,都遇到了问题。由于压缩包是高通自己
    的头像 发表于 01-26 08:29 416次阅读
    蓝牙 | 软件:<b class='flag-5'>Git</b>管理高通的ChipCode项目

    制造企业分支机构如何高效互联?

      随着制造企业业务的不断扩张,分布在不同地区的分支机构逐渐成为提高市场覆盖和降低生产成本的重要手段。然而,分支机构的增多也带来了管理和协调的挑战。为了有效管理和协调各个分支机构的运营,建立一个高效
    的头像 发表于 01-25 16:26 460次阅读

    克服PLC编程的难题—基于Git的软件

    Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。
    的头像 发表于 01-22 09:30 973次阅读
    克服PLC编程的难题—基于<b class='flag-5'>Git</b>的软件

    Git开发者关注内存安全问题,探讨引入Rust语言

    根据最新披露的邮件讨论,Git开发团队热议在Git项目中引入Rust的可行性。作为一种开源的分布式代码版本管理工具,广泛运用于各种开发项目。尽管现在Git项目主要以C与Python为主要开发语言,但探讨显示,引入Rust能显著降
    的头像 发表于 01-15 14:23 638次阅读
    <b class='flag-5'>Git</b>开发者关注内存安全问题,探讨引入Rust语言