情景(版本控制):
我们做一个项目的时候,项目经理提出一个需求,我们在初始代码我们叫他代码一上面进行修改,第二天再昨天的基础上添加新的模块(代码二),第三天继续在前一天的代码基础项添加新的模块(代码三)。这几天不仅仅添加了新的模块,而且还修改了代码一里面很多的代码。第四天,项目经理来一句,你们这几天辛苦了。这几天新增的功能都撤销,我们不要原来的方案了!所以我们就要返回到原先的代码一上面进行开发。那么问题来了,我们不可能每天的代码都有单独的一个备份,更不可能每新增的一个模块后代码进行单独备份,那么我们如何可以提取各个状态的代码呢?
需求:
那么我们如何可以提取开发过程中各个状态的代码呢?
首先我们可以新建一个文件为1.txt
首先在文件中新加入内容 11111111111111111
git add .
git commit -am "1111111111"
这个时候文件包含内容1111111111111111 的1.txt就被存入到本地仓库中了
然后在文件中新加入内容 22222222222
git add .
git commit -am "22222222222"
[图片上传中...(1.png-ed31d5-1529586751397-0)]
我们在次在文件中新加入内容 33333333333333
git add .
git commit -am "33333333333"
这个时候文件包含内容1111111111111111 22222222222222222 3333333333333的1.txt就被存入到本地仓库中了
这个时候,我们想把代码修改成第一次提交时候的样子,我们可以强行修改txt文件,但是正常时候我们开发的时候我们并不能记住我们的代码进行修改,这样确实有点麻烦,我们可以使用git 的版本回退功能通过提交记录退回到到我们需要回到的状态
首先我们使用
###查看文件提交状态
git log
1.png
我们可以看到命令行中出现了三个提交信息(红色箭头所指),三个commit_id(紫色箭头所指),如果我们想进行版本回退到各个版本,怎么做到呢?
我们如果想回退到之前的版本,我们可以使用命令
###退回到上一个版本
git reset --hard HEAD^
###退回上上一个版本
git reset --hard HEAD^^
###退回上上上一个版本
git reset --hard HEAD^^^
###*个之前的版本使用HEAD~*
git reset --hard HEAD~4(退回到*个之间的版本)
这样写的话太麻烦,而且也不知道代码的状态,我们可以通过commit-id和提交管理的信息来查看代码,以此作为依据来返回相对应的代码不是更舒服一点呢?
###查看commit-id和提交管理的信息
git log --pretty=oneline
2.png
这样就单独显示了commit-id和提交的信息,看起来比较舒服
这个时候,我就直接可以使用命令
###返回到对应的版本号状态的代码
git reset --hard commit-id
版本号不需要写的太全,只需要写前五六位就可以了!
这样如果我们从第三次提交的代码返回到了第二次提交代码,输入命令
git reset --hard 94bc708
这个时候查看文件1.txt,文件我们会发现里面的内容已经返回到了1111111112222222的状态,很舒服
那么问题来了,如果我们突然还想回到第三次提交的状态呢,我们输入git log --pretty=oneline
我们发现只有两个commit-id和提交备注了
3.png
当然我们看到的不仅仅是我们看到的,我们需要让他回到第三次提交的状态,我们就需要提供第三次的commit-id就可以了,但是git中没有显示第三次提交的commit-id只有第一次和第二次的,那是我们看到的,其实是有的,我们的命令行窗口没有关系,我们向上拉,找到我们第一次输入的git log --pretty=oneline下面信息,就可以找到第三次显示的commit-id了,我们继续git reset --hard commit-id这个命令就可以从之前返回到未来了
这个就是git reset --hard 比较简单的使用
相对于git reset --hard ,我们还有一个命令
git reset --soft
因为我们刚才看到,我们进入第二次提交状态的时候,它之后的提交状态都被删除了,我们只有通过上拉命令行工具查看历史信息才能看到版本回退之后的状态之后的状态
当我们从版本C使用命令回退到版本B的时候,我们就变成了
5.png
这个时候C已经被我们删除了,我们关闭命令行工具之后就再也找不到版本c了
这样未免版本回退的有点生硬,我们可以使用git reset -- soft来回退版本,而它的工作原理是
4.png
当我们从版本C使用命令回退到版本B的时候,我们就变成了
6.png
有点不明白可以理解成我试一试
1.png
这个时候我们版本回退到两个版本,我们vim打开看一下可以看到本地文件还是11111111111 2222222222 33333333333
但是git log看一下
2.png
所以git reset --soft可以理解成仓库版本回退,但是本地文件保持现状
Revert
Revert撤销是一个提交的同时也会重新创建一个提交,这可以理解成最安全的方法
当版本3撤回到版本2时
3.png
这样我们可以理解成所有的操作都会被保存,所有时间段的代码都会不会被覆盖删除,很强!
网友评论