美文网首页
git 的时光倒流

git 的时光倒流

作者: 郑宋君 | 来源:发表于2018-06-23 12:46 被阅读0次

情景(版本控制):
我们做一个项目的时候,项目经理提出一个需求,我们在初始代码我们叫他代码一上面进行修改,第二天再昨天的基础上添加新的模块(代码二),第三天继续在前一天的代码基础项添加新的模块(代码三)。这几天不仅仅添加了新的模块,而且还修改了代码一里面很多的代码。第四天,项目经理来一句,你们这几天辛苦了。这几天新增的功能都撤销,我们不要原来的方案了!所以我们就要返回到原先的代码一上面进行开发。那么问题来了,我们不可能每天的代码都有单独的一个备份,更不可能每新增的一个模块后代码进行单独备份,那么我们如何可以提取各个状态的代码呢?

需求:
那么我们如何可以提取开发过程中各个状态的代码呢?
首先我们可以新建一个文件为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

这样我们可以理解成所有的操作都会被保存,所有时间段的代码都会不会被覆盖删除,很强!

相关文章

  • git 的时光倒流

    情景(版本控制):我们做一个项目的时候,项目经理提出一个需求,我们在初始代码我们叫他代码一上面进行修改,第二天再昨...

  • 假如

    假如时光倒流, 我会让快乐幸福与你相伴; 假如时光倒流, 我会将拥我入怀的你, 紧紧拥抱; 假如时光倒流, 我会毫...

  • git学习之路 (时光倒流-代码回退 git reset 与 g

    说代码撤销之前先说说 git HEAD 和 相对引用 HEAD 官方说法: HEAD 是一个对当前检出记录的符号...

  • 我多想让时光倒流

    我多想让时光倒流,多想让时光倒流,过去的日子如同手中的沙子,越想紧握它,留住它,它流失得越快。多想让时光倒流。 我...

  • 2017-12-09

    记得之前看《时光倒流的女孩》,所有死去的人都会来到时光倒流岛,开启自己时光倒流的新生活。今天看到《寻梦环游记》所有...

  • 写作营作业:如果时光倒流

    3月29日,参考主题:如果时光倒流 《如果时光倒流》 如果时光倒流会怎么样? 这个问题我曾经设想过无数次。 如果时...

  • 第一章

    如果,时光倒流我愿永远牵住你的手,不再放开。 如果,时光倒流我愿穿上最美的婚纱一生伴你左右。 如果,时光倒流我愿陪...

  • 《当时光倒流》

    当时光倒流 或许雨会化成雾 叶落能化成蝶 当时光倒流 你会不会,不改曾经 做着将来 与时光倒流 或许你我还在光年之...

  • 时光倒流…

    巴拉拉能量…小仙女…时光倒流… 菠萝菠萝蜜…菠萝菠萝蜜…时光倒流… 咪路咪路咪路咪路蹦…时光倒流… …………… 从...

  • 2016•寒假

    假如时光倒流

网友评论

      本文标题:git 的时光倒流

      本文链接:https://www.haomeiwen.com/subject/lldfyftx.html