git的远程分支的作用和本地分支有什么区别

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

我们把日志里的英文翻译过来是说,我们  当前的分支没有设置任何上游分支。然后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起一个别名:

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

操作命令

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

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

代码拉取

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

git clone -o chengzhi

实际上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就可以更新和推送这个分支了,会方便很多。

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

到此这篇关于git的远程分支的作用和本地的有什么区别的文章就介绍到这了,更多相关git远程分支内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Git 详细介绍查看、删除、重命名远程分支和tag

    Git 详细介绍查看.删除.重命名远程分支和tag 1. 查看远程 分支加上-a参数可以查看远程分支,远程分支会用红色表示出来: xiaosi@Qunar:~/code/qtown-score$ git branch -a FRESH-1606_qscore-20160503 * dev master remotes/origin/20151225-qtown-score-FRESH-1236 remotes/origin/2016-2qtscore remotes/origin/FRESH-1

  • Git 创建分支提交远程分支详解

    Git 创建分支提交远程分支详解 1.创建本地分支 git branch 分支名,例如:git branch 2.0.1.20120806 注:2.0.1.20120806是分支名称,可以随便定义. 2.切换本地分支 git checkout 分支名,例如从master切换到分支:git checkout 2.0.1.20120806 3.远程分支就是本地分支push到服务器上.比如master就是一个最典型的远程分支(默认). git push origin 2.0.1.20120806 4.

  • Git获取本地分支对应的远端服务器分支名的方法

    可以使用下面命令查看本地分支在远端服务器的分支名: $ git rev-parse --abbrev-ref local_branch_name@{upstream} 把 local_branch_name 换成要查询的本地分支名,例如 master 等.下面通过例子来说明这个命令各个参数的含义. 先创建一个新的本地分支,名为 new_local_branch,关连到远端服务器的 Remote_Branch_U 分支: $ git checkout -b new_local_branch aos

  • 详解git使用小结(本地分支与远程分支、git命令)

    git git 是一个版本管理系统(VCS),可以在任何时间点,将文档的状态作为一份更新记录保存起来,并且在任意的时间点,恢复更新记录 版本管理 版本管理是一种记录文件变化的方式,方便查阅特定版本号的文件内容 人为维护文档版本问题 1.文档数量紊多,命名不清晰,导致文档版本混乱 2.每次编译文档需要赋值,不方便 3.多人同时编辑一个文档,容易产生覆盖 git使用 在使用git前,需要全局配置git 提交用户名 - git config --global user.name "用户名"

  • git查看、创建、删除、本地、远程分支方法详解

    1. 查看远程分支 git branch -r origin/master 2. 查看本地分支 git branch *master 注:以*开头指明现在所在的本地分支 3. 查看本地分支和远程分支 git branch -a *master remotes/origin/master 4. 创建分支 *新建一个分支,但依然停留在当前分支 git branch [branch-name] *新建一个分支,并切换到该分支上 git branch -b [branch-name] 4-1 创建本地分

  • git切换到指定远程分支的方法

    我们在使用git进行开发的时候经常会遇到需要切换远程分支并且提交到远程指定分支的情况,现在记录下操作步骤. 查看远程所有分支 $ git branch -a git branch不带参数,列出本地已经存在的分支,并且在当前分支的前面用*标记,加上-a参数可以查看所有分支列表,包括本地和远程,远程分支一般会用红色字体标记出来 * dev master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/

  • git的远程分支的作用和本地分支有什么区别

    不知道大家有没有经历过,当我们切换到了一个新的分支想要提交代码的时候,总会遇到这样的错误. 我们把日志里的英文翻译过来是说,我们  当前的分支没有设置任何上游分支.然后git提示我们可以运行下面这行代码来设置远程的上游,这样我们就可以push成功了. 当然如果我们push的时候执行的不是git push,而是后面再加上origin的话,就可以push成功了.比如这样: 那么这是什么原因呢?这个origin分支又是什么意思呢?我们今天就来讨论一下这个问题. 远程分支 远程分支其实就是远程代码仓库当

  • Git 删除远程服务器文件同时保留本地文件实例详解

    Git 如何删除远程服务器文件同时保留本地文件 在上传工程到git上时,有时候会把本地的一些eclipse配置文件传到服务器上,这时你先删除本地,再同步服务器,显然是不合理的.git提供了一个好的解决方法,可以直接删除服务器文件,同时不影响本地文件,命令如下 git rm --cached filename/-r directory git commit "xxxx" git push 1.删除服务器文件,本地保留 git rm --cached useless.log git com

  • git克隆远程仓库的指定分支方法(附常用git配置命令)

    一.普通克隆方式: git clone <远程仓库地址> 这种克隆方式默认是克隆master主分支,而且通过命令 git branch --list 能看到克隆后在本地也只有这一个分支,如果再通过新建分支再拉取指定分支,甚至可能还需要解决冲突,太繁琐. 二.克隆远程指定分支 那么,如何快速有效的直接克隆远程指定分支? 只需要一条命令: git clone -b <指定分支名> <远程仓库地址> 会自动在克隆该分支在本地,同样克隆后本地只有这一个分支. 附:常用git配置

  • git本地分支和stash内容报错消失的问题

    本地一个长期更新的项目,git log突然报错: xxx@yyy:~/android/project/kernel/.git$ git log . fatal: your current branch 'project-dev' does not have any commits yet 如果git status,发现文件全部是new状态. 如果git branch -v, 发现本地分支信息消失. 如果git stash list, 也没有任何消息. 看来, 即使git本身如此优秀, 也是避免不

  • 将git项目导入GitHub的方法(附创建分支)

    前言:我们应该很多都会有自己的私有项目,大多情况都是存放在自己的硬盘中,今天我分享一下怎么讲自己的私有项目更新到GitHub上,这样再也不用担心项目丢失了. 一:下载git 下载链接git链接,根据自己情况选择,我是Windows上开发的所以选择的是win. 二:生成.ssh 下载git安装以后了我们右键单击桌面选择Git Bash Here就会出现了一个git的界面. 输入cd ~/.ssh 查看是否已经有ssh密匙,如果没有密匙则不会有这个文件夹,有则备份然后删除 生成密匙:ssh-keyg

  • PHP获取远程图片并保存到本地的方法

    本文实例讲述了PHP获取远程图片并保存到本地的方法.分享给大家供大家参考.具体实现方法如下: <?php function GrabImage($url, $filename = "") { if ($url == ""):return false; endif; //如果$url地址为空,直接退出 if ($filename == "") { //如果没有指定新的文件名 $ext = strrchr($url, "."

  • idea中git从码云克隆项目到本地的方法

    1.首先需要在操作系统上安装Git分布式管理系统 此处自行百度............. 2.在Intellij IDEA中配置Git 打开Settings(File-->Settings) --> 在搜索栏内输入git,回车跳转到Git配置页面 --> 将git的运行路径填入Path to Git executable一栏(一般IDEA会自动定位),其他配置选项按默认即可 --> 点击Test进行测试,配置成功将显示如下界面 同理,配置GitHub也是一样(没有GitHub帐号的

随机推荐