Git分支

在git中使用分支非常简单,只需要使用Git branch命令即可:

$ git branch test   #新建test分支

此时使用git branch查看一下分支:

此时的确多了一个分支,但当前分支仍旧在master上,如果觉得自己起的分支名不够那么有规范,还可以修改分支名,使用git branch -m test develop,也就是说把test分支名改为develop,如果不需要develop这个分支,可以使用命令git branch -d develop删除。如果想要切换到develop分支上,使用git checkout develop即可。注意在删除分支的时候,除了当前所在分支无法删除之外,其他分支均可删除,如果想删除当前分支,需要先切换至其他分支上去。其中*号代表当前所处分支。

首先我们切换到develop分支,然后追加两个文件,并两次commit。

然后查看一些git记录

可以看出develop比master分支前进了两次commit,在这两次的commit中,新增了两个文件,如果想切换回原来的master分支,执行命令git checkout master,查看一下文件列表,

发现并没有增加的那两个文件,这是因为我们增加的这两个文件,是在不同的分支,只要切换回develop分支,文件就会出现了。

如果要切换回哪个分支,首先这个分支必须存在,如果没有这个分支,那么在git checkout分支的时候,加上-b参数就可以了。如果这个分支本身就存在,那么git回直接切换过去,如果不存在,Git回帮你创建一个,然后再切换过去。

Git切换分支的时候发生了什么

前面提到,在develop新增的两个文件,切换回master分支的时候就不见了,再切换回develop的时候就又出现了,其实不是将目录或者文件复制出来,改动之后放回去,在Git切换分支的时候主要做了以下两件事:

1.更新暂存区以及工作目录。

Git在切换分支时,会用该分支指向的那个Commit的内容来更新暂存区以及工作目录。但在切换分支之前,所做的改动则会留在工作目录中,不受影响。

2.变更HEAD的位置

除了跟新暂存区以及工作目录的内容之外,HEAD也会指向刚刚切换回去的那个分支。

假设现在还在develop分支,切换到master之前,新增了一个cat.html文件,同时也改动了welcome.html文件内容,此时的状态为:

当前的welcome.html状态为modified,而cat.html状态为Untracked,此时如果不commit就直接切换回master分支,会用该分支指向的那个commit的内容更新暂存区以及工作目录,但在切花分支之前所做的改动则会留在工作目录中,不受影响。

然后查看一下文件列表:

也就是说,切换分支并不会影响已经在工作目录中的那些改动。

合并分支

在上面的例子中,从master分支开了一个develop分支,并做了2次commit,现在我们任务执行的差不多了,就要准备合并回来了,如果想用master分支合并develop分支,那么就需要先切换回master分支,git checkout master,然后使用git merge develop进行分支合并。

然后查看文件列表

由于master分支已经合并了develop分支,所以在develop分支新增的文件也出现在了master分支。在这里推荐大家使用一个git提交记录的查看工具,具有可视化界面,能够清除的看到自己在哪个分支上,大家可以使用gitk命令,也可以使用qgit命令,两者都需要使用sudo apt install 进行安装。qgit界面如下,首先需要勾选三个复选框。

可以看到当前我们所处分支魏develop分支(高亮),且我们的master分支落后develop分支两次提交,此时我们merge之后,刷新一下该界面,查看一下。

在合并之后,其进度已经跟develop分支同步,并且,当前master的分支下的文件状态,已经跟develop分支完全一致,这是非常需要值得注意的事情。

Git基础教程(三)相关推荐

  1. Git系列(一)、Git基础教程【建议收藏】

    Git基础教程 一.Git简介 1.1.什么是Git? 1.2.Git的特点 1.3.集中式与分布式的区别? 1.4.什么是版本控制系统? 1.5.Git下载安装 1.5.Git配置 1.6.Git ...

  2. Git基础教程(二)

    继续上篇Git基础教程(一),在开篇之前,先回顾一下上篇中的基本命令. 1 配置命令:git config --global * 2 版本库初始化:git init 3 向版本库添加文件:git ad ...

  3. Ogre3D基础教程三

    文档:教程:基础教程:基础教程三 出自Ogre3D开放资源地带 跳转到: 导航, 搜索 目录 [隐藏] 1 先决条件 2 简介 3 从这里开始 4 根对象和场景管理器的创建 4.1 根对象 4.2 场 ...

  4. MySql基础教程(三)——查询训练

    在MySql两轮基础的学习之后,来一波实战演习... 三张表:学生表,课程表,成绩表. 建表详细信息见 MySql基础教程(一) 转载于:https://www.cnblogs.com/zhouerb ...

  5. git 基础教程总结

    Git是目前世界上最先进的分布式版本控制系统. 基础 一.安装 1.安装 2.配置 $ git config –global user.name "Your Name" $ git ...

  6. 基础教程三(天空,地面和雾化处理)

    简介 在这篇教程里,我们将会一起探索OGRE中的天空,地面和雾化处理.通过这篇教程,您应该明白天空盒(Skybox),天空穹(Skydome)和天空面(Skyplane)的用法和区别.您还会了解不同种 ...

  7. 麒麟子Javascript游戏编程零基础教程三:无处不在的Javascript

    如果你是从大纲那一篇开始看过来的,你在点开这个文章的连接之前,肯定期望说,麒麟子又会在讲正式内容之前BB点什么,这样的话,看起教程来轻松不累还实惠.没错,你猜对了,这就是我的风格. 为什么会把编程教学 ...

  8. eureka hostname作用_SpringCloud基础教程(三)-Eureka进阶

       我的博客:http://www.hao127.com.cn/,欢迎浏览博客!    上一章 http://hao127.com.cn/#/view/65当中,我们介绍了微服务组件当中的服务注册和 ...

  9. yml eureka defaultzone 只生效第一个_SpringCloud基础教程(三)-Eureka进阶

       我的博客:http://www.hao127.com.cn/,欢迎浏览博客!    上一章 http://hao127.com.cn/#/view/65当中,我们介绍了微服务组件当中的服务注册和 ...

最新文章

  1. 【组队学习】【第30期】青少年编程(Scratch 三级)
  2. android功能网格布局,Visual Studio 开发安卓之布局-网格布局(GridLayout)
  3. lucene DocValues——没有看懂
  4. 用VB开发SAP接口程序
  5. mysql+只读参数_mysql只读变量
  6. 语言阿克曼函数_函数式的动态规划
  7. JavaScript基础知识(一)
  8. 使用cocoapods install友盟时报错Error installing UMengAnalytics
  9. 一文了解Android游戏SDK开发
  10. python导入第三方库失败_史上最详细 Python第三方库添加方法 and 错误解决方法
  11. Lua学习笔记-OOP面向对象
  12. 通过ESP8266手机或电脑浏览器网页能控制远程任意组任意路继电器开关并收发单片机指令 测试OK
  13. 2.OSGI企业应用开发-Eclipse中搭建Felix运行环境
  14. Java爬虫获取豆瓣的短评数据
  15. 百度智能云开物凭什么在“双跨”新增名单中排名榜首?
  16. java 比赛赛程_分治算法兵乓球比赛日程(java)
  17. 大数据学习之——Zookeeper安装
  18. 文科计算机有哪些专业,计算机有哪些专业
  19. 复旦大学计算机专业林语惊,倦鸟归林 - 草稿
  20. 44-网上商城数据库-商品分类数据操作(一)

热门文章

  1. 基于字典的超分辨率实现的各种方法
  2. [paper reading] RetinaNet
  3. Echarts数据可视化action图表行为的相关操作,开发全解+完美注释
  4. 兰州石化学院计算机证书领取,关于领取2019年9月全国计算机等级考试证书的通知...
  5. ubuntu18.04 本地源制作
  6. HDU6268 Master of Subgraph
  7. 运动控制卡中伺服电机的规划位置与编码器位置的区别
  8. (1)封装 (2)static关键字 (3)继承
  9. 由前序遍历和中序遍历确定二叉树
  10. POJ - 1008 Maya Calendar