1. 首页
  2. 工具类
  3. Git系列教程

git的远程分支是干啥的,和本地的有什么区别?

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

git的远程分支是干啥的,和本地的有什么区别?

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

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

git的远程分支是干啥的,和本地的有什么区别?

那么这是什么原因呢?这个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推送到远程,但是对于这其中的细节可能不太清楚。之前没有详细介绍过远程分支,所以也没办法深入,我们今天刚好聊到这个话题,正好好好说道说道。
Js中文网 – 全球前端挚爱的技术成长平台 www.javascriptC.com,Javascript中文网是以前端进阶资源教程分享为主的专业网站,包括:前端教程、JavaScript资讯、大厂面试题、typescript教程、程序人生、React.js源码解读、Vue3.js技术揭秘等,以帮助开发者成长为愿景的社区

代码拉取

我们先说代码拉取,说到代码拉取大家的第一反应可能是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就可以更新和推送这个分支了,会方便很多。

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

今天的文章就到这里,衷心祝愿大家每天都有所收获。如果还喜欢今天的内容的话,请来一个三连支持吧~(点赞、关注、转发

原文链接,求个关注

本文使用 mdnice 排版

- END –

作者:承志
链接:https://juejin.im/post/6888860040636301326

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「IT平头哥联盟」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:git的远程分支是干啥的,和本地的有什么区别?

链接:https://www.javascriptc.com/4682.html

« 一起学习Nginx Unit 入门教程
LeetCode 055. 跳跃游戏»
Flutter 中文教程资源

相关推荐

QR code