一、分支

1、分支简单介绍

简单使用:

可以将git branch new_branchgit checkout new_branch两个命令合并成一个命令: git checkout -b new_branch。这个命令的意思就是创建一个分支并且切换到这个分支上。
本地分支改名: git branch -m 原分支名 新分支名

2、合并分支merge

这个过程中,下一个版本会记录一个parent id,这个parent id就是前一个版本的commit id

注意当我们在dev中更改文件之后,一定要先addcommit,不然那样就会和master内容同步了,我们需要的是在dev中更改之后,在没有进行merge之前,master不会和dev相同: 看下面的演示:

3、快进fast forward

HEAD的含义: (在git reset HEAD test.txt中使用过)

  • HEAD指向的是当前分支;
  • master是指向提交(本质上只的是当前的提交);

即如下表示:

如果我们执行git checkout -b dev,我们就会创建一个dev分支并指向新的分支。

这是在master分支的基础上,但是这个过程并不是像SVN一样会拷贝一份,而是只是创建一个指针dev,会和master指向了同一个提交。但此时HEAD指向的是dev(当前分支)。

查看HEAD文件的内容:

然后我在上图的基础上,如果我在dev分支下进行了一次提交,图就会变成下面这样:

此时master指向第3次提交,而dev已经指向了第四次提交。

接下来,如果我将dev上面的修改合并到master上面 (在master中操作),上面的图就会变成下面这样:

这种情况不会有冲突存在。

实战演示:

总结一下这种情况,就是直接从master分支跳转到了最后的dev修改的那个位置,相当于指针的跳转。

4、master和dev同时修改同一文件同一位置产生冲突

演示冲突:在master中修改了test.txt的第三行,在dev中也修改了test.txt中的第三行,于是合并的时候就会产生冲突:

上面的过程就是如下图的过程:

注意箭头往回指是因为后一个提交里面包含一个parent-id指向前一个提交的commit-id,前面已经说过。

注意观察master分支中test.txt文件的内容以及我们将解决这次冲突(即我们打算保存master的修改而丢弃dev的修改):

5、深入fast-forward模式

也就是说在fast-forward模式下:

  • 如果可能(合并时没有冲突),那么Git就会采用fast-forward模式;
  • 在这种模式下,删除分支时会丢掉分支信息;
  • 合并时加上 -- no-ff参数会禁用fast-forward模式,这样就会多出一个commit - id,也就是说在fast-forward模式下面merge不会多出一个commit-id
git merge -- no-ff dev
  • 查看日志更好的方式
git log --graph

关于fast-forward模式和非fast-forward模式下的少一次commit-id和多一次commid-id的图解:

我们先看使用fast-forward模式下的: (即合并的时候commit-id和另一个分支相同):

再看不使用fast-forward模式:

二、Git版本回退

Git的另外一个强大之处在于可以回退到之前的任意一个版本:

主要看下面的命令:

  • git reset --hard HEAD^, 往后回退1个版本;
  • git reset --hard HEAD~3,往后回退3个版本;
  • git reset --hard commit-id,直接回退到某个commit-id;(如果当前在靠前面,就可以通过git log查看);
  • 如果在后面,不能查看到前面的git log 得到 commit-id怎么办呢?可以用git reflog查看自己的操作日志;

实战演示:

查看修改和提交日志:

下面演示怎么回退:

原文:Java架构笔记

免费Java高级资料需要自己领取,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G。
传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q

Git分支和版本回退的更多相关文章

  1. [原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset

    在window下已经安装了git的环境 1.建立本地仓库 mkdir   test     #建立test目录 cd   test        #进入目录 git  init           # ...

  2. Git使用:版本回退

    在Git中,我们可以用 git log命令查看我们修改的历史记录 C:\Users\Administrator\Documents\GitHub\learngit [master]> git l ...

  3. Git新建分支,分支合并,版本回退详解

    一.git基本命令 git拉取仓库代码 #拉取master代码 git clone git仓库地址 #拉取分支代码 git clone -b 分支名称 git仓库地址 2.git添加代码到本地仓库 g ...

  4. Git秘籍:在 Git 中进行版本回退

    导读 在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题.快来试试吧. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中 ...

  5. Git 系列(四):在 Git 中进行版本回退

    在这篇文章中,你将学到如何查看项目中的历史版本,如何进行版本回退,以及如何创建 Git 分支以便你可以大胆尝试而不会出现问题. 在你的 Git 项目的历史中,你的位置就像是摇滚专辑中的一个片段,由一个 ...

  6. 记录一次Git远程仓库版本回退

    操作过程: 首先查看远程仓库版本,如下图所见,最近一次提交为2018-03-19 22:16:25 第一步:使用git log命令查看历史提交记录,选择要回退的版本号,commit后面一串字符,这里我 ...

  7. 【Git学习笔记】初始化Git仓库和版本回退

    学习地址 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 什么是版本库呢?版本库又 ...

  8. git中的版本回退

    git版本回退有两种情况,一种是从本地版本库中(head区)回退到某个版本,可以用命令 git reset --hard head^ 或git reset --hard head~x ,head指的是 ...

  9. Git教程之版本回退(4)

    现在,我们已经学会了修改文件,然后把修改提交到Git版本库,现在再次修改readme.txt文件如下:

随机推荐

  1. centos7 下面显卡驱动安装

    一.安装驱动 屏蔽默认的nouveau cd /lib/modprobe.d/ sudo vim dist-blacklist.conf 将nvidiafb注释掉 #blacklist nvidiaf ...

  2. django框架使用及创建项目

    一.django框架使用及创建项目 (1)创建Django项目 1>在cmd命令行下输入:django-admin startproject RecourceRegist(进入相应路径下) 2& ...

  3. Springboot的entity,dao,controller,service层级理解

    1.Dao层:持久层,主要与数据库交互 DAO层首先会创建Dao接口,接着就可以在配置文件中定义该接口的实现类:接着就可以在模块中调用Dao的接口进行数据业务的处理,而不用关注此接口的具体实现类是哪一 ...

  4. 模仿51cto搜索框

    做这个demo遇见的问题 1==>input type=submit有默认样式 padding:1px 6px所以将他去除 2==>input submit有默认样式 去除默认边框 bor ...

  5. Visual Studio的UTF-8问题

    参考:https://www.jianshu.com/p/c51cbb2f20e1 一.在“工具”菜单找到“自定义”,然后按照图示操作. 二.选择“编码”.

  6. 201871010133-赵永军《面向对象程序设计(java)》第十六周学习总结

    201871010133-赵永军<面向对象程序设计(java)>第十六周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. 201871020225-牟星源《面向对象程序设计(java)》第十四周学习总结

    201871020225-牟星源<面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  8. cookie 用户认证

    客户端浏览器上的一个文件  可认为是键值对集合 基于浏览器的功能  可以实现一个用户验证的功能 因为要在页面上显示当前用户的信息 修改 写index urls 运行直接输入index时 会自动进入lo ...

  9. Hbase多条件查询数据(FilterList)

    利用Filter进行筛选:HBase的Scan可以通过setFilter方法添加过滤器(Filter),这也是分页.多条件查询的基础.HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBas ...

  10. 【网络知识之二】HTTP协议

    HTTP协议(Hypertext Transfer Protocol,超文本传输协议),一种无状态的.应用层的.以请求/应答方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系 ...