1.4.3.1 历史版本切换
当我们遇到这种情况,我们在一周前开发的程序,当时只有一个bug,然而,经过这一周不懈努力,我们的bug增加到了10个!而这种情况很常见滴,明显我们更愿意面对一周前的版本,那我们就需要回退到一周前的版本。
这里再介绍一个命令git reflog,它可以查看所有分支的所有操作记录(包括已经被删除的commit记录的操作),并且它的唯一标识更简短。
那如何切换到历史版本呢?这里用到一个命令,git reset --hard (加上版本的唯一索引值)就切换成功了。
$ git reflog //查看历史版本
361e86e (HEAD -> master) HEAD@{0}: commit: commit second file
6815cf2 HEAD@{1}: commit (initial): commit first file //假如我们想切换到这个版本
Administrator@DESKTOP-SG1RG4O MINGW64 /d/Documents/Documents/Repository/my_project (master)
$ git reset --hard 6815cf2 //切换历史版本 后面6815cf2为版本标识符
HEAD is now at 6815cf2 commit first file //这里提示切换成功
当然,我们也可以再回到比较新的版本,只要是日志上有的,都可以切换。
1.4.3.2 分支管理介绍
什么是分支呢?那个例子来说,比如你需要去甲地区拉矿石,还需要去乙地拉石油,你原本只有一辆车,但后来你又顾了一车,然后两辆车可以分开同时去拉货,可能有的快,有的慢,但是最后都拉回来了,最后的结果是你获得了矿石和石油。
总结有这样的规律,多条时间线并行工作,互不打扰,多条时间线可以合并
分支:由每次提交的代码串成一条时间线
分支应用场景
1.周期较长的模块开发
假设你准备开发一个新功能,但是需要一个月才能完成。第一周写了20%的代码,突然发现原来已经写好的功能出现了一个严重的Bug,那现在就需要放下手中的新功能,去修复Bug。但这20%的代码不能舍弃,并且也担心丢失,这就需要开启一个新的版本控制。
2.尝试性的模块开发
业务人员给我们提出了一个需求,经过我们的思考和分析该需求应该可以使用技术手段进行实现。但是我们还不敢确定,我们就可以去创建一个分支基于分支进行尝试性开发。
使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
分支工作流程
分支是由每次提交的代码串成一条时间线。每次产生新的一个版本,由Master控制,这些版本串成一条线,也就是时间线,而Master指向的是最新的一个版本,当前的时间线就是主线。当我们需要尝试得开发一个项目,假如项目名字叫Dev,Head指向的是当前所使用的分支,这个分支不会影响主线的开发。
那如何合并呢?开发完后我们将Master指向开发完的Dev,这时这个版本就在主线上了,这时,再使Head指向Master,分支也就合并了
对于合并后旧的分支,也没有存在的必要,可以给删掉。
总结下来工作流程就是创建新分支、切换分支、合并分支、删除分支
1.4.3.3 分支管理操作
创建分支git branch + 分支名
通过git branch ……这个命令创建一个名为fenzhi1的分支;界面显示的蓝色字体master就是当前的处于的分支,也可以通过git status命令查看当前处于的分支;那如何查看有哪些分支呢,直接git branch命令,不要加名称,就显示出来已创建的分支。
切换分支git checkout + 分支名
创建了分支后,如何切换到分支呢?输入git checkout + 分支名就切换了
现在处于新建的分支fenzhi1,那么在这个分支下操作文件,主线(master)是否会发生改变呢?我们再创建个test2,添加并提交,然后用 ls 命令查看当前分支有哪些文件。
发现分支下有test.txt和test2.txt文件。再切换到master下,用ls命令查看有哪些文件。
发线主线下文件并没有发生改变,这就验证了主线和分支是并行、互不影响的。
合并分支 git merge+分支名
首先我们得处于主线下,如果不是master,需要切换到master。输入git merge +要合并的分支名,这时会发现分支下创建或修改的文件也出现在主线下了。当然,也可将主线合并到分支上,在分支下输入合并master命令就可以实现,但是不建议这样做。
删除分支 git branch -d + 分支名
这里我一时手乱输入错名字了,它提示这个名字找不到。正确输入后再输入git branch查看fenzhi1已经不见了。