GitHub 入门教程——Git的分支,合并与回溯

前言:
博主在前面一篇文章中给大家讲述了Git的一些基本概念,和一些简单的命令用法,今天这篇文章博主就来讲述一下Git中一些在我们日常的开发中会经常用到的命令,和它的使用方法,今天主要就讲分支的概念,还有合并与回溯,这里就不在啰嗦了,直接今天的正题;
接专题上一篇博文

一. 分支

  • 分支可谓是很多初次接触到Git的小伙伴学习之路上的一座大山,很多走到山下就怯而止路了,其实吧这个概念也不是很难,分支呢作为一个编程者应该很熟悉,很难想象如果编程的世界没有分支会变成什么样子,我们从学习一门编程语言的第一步(打印Hello word)开始,紧接着的第二步便是学习分支(if else),由此也可以看到分支的重要性,Git中的分支亦是如此,凡事都是这样,你要是理解了其中的基本原理与做法,再来学习这个东西就易如反掌了.
  • 首先说说为什么要有分支?
    • 我们先来看一个小学就教过的问题:
      起床2分钟,蒸饭10分钟,刷牙2分钟,洗脸3分钟,吃饭5分钟,那么请问最后你总共要花多少分钟才能干完所有事情呢?
      很明显首先是起床,然后蒸饭,在蒸饭的同时我们可以刷牙洗脸,最后在吃饭.也就是说蒸饭和洗漱是同时进行的这就是并行的概念这样大大缩短的我们时间,提高了我们时间利用率,开发也是这样,我们也是可以将一个开发流程分成不同的stage(阶段),然后再根据不同阶段预测需要的执行时间,然后再合理分配任务,因为术业有专攻每个人有每个人的强项,我们只需要安排适合做这个任务的人来完成这个任务,这才能最大限度的利用人才.这些概念都是工作目录分解的知识(WBS)
    • 案例看完还没懂?看图吧:
      在这里插入图片描述
      我们的任务一直存在一个主线任务(master),然后这些任务会根据需求进行拆分分解成副线任务,然后副线任务完成后就会跟主线任务进行合并,这就是Git分支中的思想;
  • git branch 显示分支信息
    这条命令就是用来显示当前的工作树下有哪一些分支,还有当前处于哪一个分支之上,我们还是进入上次新建的工作目录下来.执行这条命令来看看:
    在这里插入图片描述
    可以看到当前的项目中只有一个master分支,这个分支是在项目的Git初始化时就自动为我们创建,一般来说master分支上的版本处于稳定版本用于发布用,分支上的版本是作为开发新功能使用,分支名前面带的 * 号表示当前所处的分支.
  • git branch branch_name 创建一个新的分支
    和前面一个命令不同的地方就是我们在后面加一个我们自定义的分支名,就会创建一个该名称的分支出来:
    在这里插入图片描述
    我们使用命令创建了一个名为branch1的新分支,然后又查看了当前项目中的所有分支,可以看见就多出来了一个我们刚创建好的分支出来.
  • git checkout branch_name 选择切换分支
    我们如果想切换到另外一个分支就可以使用这个命令.
    在这里插入图片描述
    我们使用命令切换到指定分支之后再次查看分支情况,可以看当 * 已经跳到了刚才新建的分支前面,表示我们已经切换到该分支来了.
    在这里插入图片描述
    我们再在新建分支中查看日志,可以发现两边的日志是没有区别的,意味着创建分支的过程,就是把当前master分支的状态拷贝一遍出来在新的分支中,再试试在新的分支中为READEME.md 文件再添加一行内容
    在这里插入图片描述
    !!! 注意这里就要敲黑板了,命令有点多,且听我解释一下,我们首先在 branch1 分支中给READEME.md 文件添加了一行内容,然后我们并在branch1中提交了这次操作,然后在分支branch1查看READEME.md 文件的内容,然后再通过命令切换到了master分支中,在master分支中再次查看READEME.md 文件的内容可以发现在master分支中我们并不能看到branch1中的变化,也就是是说分支之间是独立的.
  • git checkout -b branch_name 创建并切换到目标分支
    使用 -b 参数后,就会直接创建并切换到该分之下,如果目标分支存在就会提示
    在这里插入图片描述
    可以看到使用这种方式更佳的便捷,和前面使用的方法创建出来的分支是一样的.

二. 分支的合并

  • git merge
    因为我们在合并时想要记录此次合并,所以还需要加上参数 “–no-ff”,这样会将此次合并以创建一个集合的方式提交并记录到日志当中去;
    在这里插入图片描述
    从图中可以看到,我们先切换到了master分支下,然后执行命令和branch1分支进行合并.在这条命令执行时会弹出一个编辑框让你填写本次提交的描述,Ctrl + X 就可保存并退出,然后本次合并就提交成功了,然后我们再来查看一下日志
    在这里插入图片描述
    这里查看日志我们使用了一个新的参数"–graph" 顾名思义加上这个参数后日志会以图的方式显示出来,在这个上面我们可以看到项目版本的流程线,不同位置的线条代表不同的分支,在线条的重合处代表分支的合并操作.

三. 回溯到历史版本

  • git reset
    每个人都想拥有穿梭时间的能力,虽然在现实生活中你做不到,但在Git中你可以当一个实实在在的时光穿梭者,在这里你就是上帝,你可以随意的篡改历史,有的小伙伴可能会问为什么要有这个能力,我就在这里打个比方把,你试想一下这个世界没有 Ctrl + z 会出现什么状况,应该会一团糟吧,你的所有从操作都得如履薄冰,小心翼翼,因为不能回退一旦错了就只能重来了.好在Git是人性化的,作为一款强大的版本工具,它怎么能容忍这样的情况发生了,所以就有了回溯的功能.然我们来看看如果我们想回到分支branch1创建时该怎么做,首先你还得回忆起第一篇文章中将的 log 中的hash编码,没错他就是时间的标识,也就是开启时空旅行的钥匙.我们来看怎么做:
    在这里插入图片描述
    我们使用 ‘–hard’ 指定当时时间点的hash编码值,我们变回到了当时的时间点,执行完毕后我们再来查看日志发现,处于该时间点后的提交事件就全部消失了,先别急后面我们还有办法再穿梭回去.
    我们先在当前的时间点再创建一个分支试一下:
    在这里插入图片描述
    可以看到文件还是当时那个时间点的内容,没有一丝丝的改变,现在我们在新建的这个分支中将READEME.md文件再添加一行内容并提交试一下.
    在这里插入图片描述
    没有任何问题, 一切正常;现在呢我们想要回到原来的时间点了.怎么办呢,细心的小伙伴已经发现了问题所在,我们开始不是说以Hash编码作为钥匙才能任意的穿梭时间点吗,现在我们查看的日志只显示到当前的时间点,并没有原来的操作日志,这该怎么办呢,不可能是要回退之前就要自己截图记住当时的Hash编码吧,哈哈哈当然…
    不是,Git作为一款强大的版本控制工具,肯定设计之初就考虑到这个问题的,我们只需要一个命令即可查看当前仓库所有的日志信息
  • git reflog
    这条命令可以带你查看所有的操作记录,看看下面的使用案例吧:
    在这里插入图片描述
    使用这条命令后我们可以看到所有的操作记录,包括分支的切换等等,我们找到reset执行的时间点,我们只需切换到这个时间点以前即可,还是用前面的reset命令进行转移,其实只需要前面几位Hash编码就可以了,让我们来试试:
    注意这里要先切换到master之后再进行穿梭,不然你就是在当前分支进行的时间前进,这里博主忘了截切换master的步骤图,所以注意!在这里插入图片描述
    可以看到我们已经成功的回到了原来的时间点,不妨我们来试试在与先前创建的branch_pre进行合并试试:
    在这里插入图片描述
    很遗憾没有合并成功,它提示我们发生了冲突,让我们修改冲突的文件(README.md)后在进行提交.然我们来看看READEME.md文件变成了什么样子;在这里插入图片描述
    可以看到很奇怪变成了这个样子,=======上面是当前HEAD的内容,下面是待合并的内容,就是这两行发生了错误,这种情况往往我们只需要留下一行即可,我们来修改一次试试.
    在这里插入图片描述
    可以看到我们解决完冲突后再次进行提交,这样此次合并就成功了.

这就是这篇文章的全部内容了,希望能够帮助到你,如果你喜欢这篇文章不妨动动小手点个赞再走呗! 谢谢

猜你喜欢

转载自blog.csdn.net/qq_42359956/article/details/105840915