• 技术文章 >开发工具 >git

    带你搞懂git回滚代码(实例详解)

    WBOYWBOY2022-02-15 17:39:29转载3444

    本篇文章给大家带来了关于Git回滚代码的相关知识,Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理,希望对大家有帮助。

    在日常coding的过程中免不了分支之间的合并,回滚、提交、打tag等操作,如果你现在还不知道怎么使用git工具回滚代码,或者总是担心出错没有把握怕把代码搞丢,这很危险毕竟代码搞丢是很大的事情小则扣绩效重则多扣点,但是 dont worry,你很幸运能看到这篇文章,当你看完以后就不会在有代码丢失的情况,因为我会带你手把手建分支模拟回滚的常见情况

    介绍

    Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

    前言

    在日常的代码回滚中常用的有两种方式git revertgit reset来进行回滚,这两种分别对应的不同的情况我尽量简单明了的介绍这两个命令都能做些什么,接下来我会从个人仓库新拉个分支从0开始,建两个分支,分别是主分支master和开发分支develop来进行模拟

    reset介绍

    1、reset的作用是当你希望提交的commit从历史记录中完全消失就可以用

    2、比如你在master分支提交了A-->B-->C提交了三个记录,这个时候如果C记录有问题你想回滚到B就可以用git reset进行

    3、这个命令大概率的情况都是用在我们主分支的,因为我们上线的分支一般是master分支然后从develop进行功能开发

    4、开发完成之后将分支合并到master,如果在上线之前发现合并的分支用问题可以将develop合并过来的分支进行回滚

    5、说白了就是取消develop的本次合并

    6、但是有一种情况就是协作开发的时候大家都合并到master之后就不能用reset强行回滚commit因为这样会把其他人的提交记录给冲掉,这时候就可以用revert来进行操作我们在下面说

    制造一个分支模拟环境

    1.从你自己的git仓库创建一个新项目之后拉到本地

    2.创建一个index.js随便写点东西,之后提交到仓库

    892bcd38cb0be56928896aba6901a0bb.png

    3.我们在终端使用git log查看commit可以看到目前只有一个刚才提交的commit

    68f7620aacb6a05261a63763ab03fff9.png

    4.我们从master分支迁出一个develop分支git branch develop,并且切换到该分支 git checkout develop

    5.在develop分支新增一段代码,这个时候develop的commit记录就新增了一条B的记录

    8452ee398247562d096b1fce52f73b05.png

    6.在develop分支接着新增一段代码

    8db886b3e6324616d6df3288affc3d7e.png

    7.看下develop分支和master分支最新的commit记录对比,可以看到dev分支领先master分支两个commit

    65ce32a8faf80cfb05b8c491b4bede20.pnga3493d3516ff7afad13053680c2c29f1.png

    注意这里有个问题当你进行分支合并的时候,有时候会发现虽然代码不一样但是在进行分支合并的时候就提示代码没有更新,就是因为当前的开发分支的commit记录是落后于要合并的目标分支的,造成这种情况的原因就是reset滥用造成的,所以reset一定要慎用

    操作一下reset来感受一下

    1.我们将develop分支的代码合并到master,切换到master分支 执行git merge develop

    2.我们在master分支使用git log查看commit记录找到B记录,准备回滚这一条,回滚的时候不需要输入全部的commid一般是前7位就够用

    5160a2005420978bcac99ed9e3c4ee3d.png

    3.重点来了我们使用git reset 69fde2c进行回滚,这个时候查看log记录发现最后一条新增c记录没有了,这里还有个问题如果直接使用git push推送会有以下提示。

    a41b46c6640f7c1236800c2b9935d084.png

    这是因为本地的记录因为我们的回滚已经落后于仓库的代码了,这个使用需要使用git push \-f进行强制提交

    4.这个时候master分支就剩下A和B的commit记录了,到这里就是一次完整的reset回滚记录,之后我们还是可以继续正常把develop分支合并到master的

    129c0e052f9c49ece401198aaa4105df.png

    revert介绍

    1、revert的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险

    2、revert可以抵消上一个提交,那么如果想要抵消多个需要执行 git revert 倒数第一个commit id 倒数第二个commit

    3、这个就常用于当你提交了一次commit之后发现提交的可能有问题就可以用到revert

    4、还有一种情景是已经有很多人提交过代码,但是想改之前的某一次commit记录又不想影响后面的也可以使用revert,他会把你后面提交的记录都放到工作区只是合并的时候需要注意一点

    我们来模拟一下环境

    1.切到develop分支现在该分支有三个commit记录e949e27c1037b6fbad3b656c22c0c295.png

    2.我们使用rever进行回滚试一下git revert 16083ce,如果你也用的是vs code可以看到工作区的变化,并且在控制台可以提交默认的commit

    769984e8b268de9e7d810e78f1879e1c.png

    3.看一下log记录,可以看到新增了一个记录Revert 新增C,并且原来的新增C还是在的

    4a1daf6769ae6e16423d7732f441be78.png

    commit记录打tag

    1、在上线之前我们需要对当前的commit记录打一个tag方便上线的代码有问题可以及时回滚

    我们来介绍一下常用的几个命令

    1.git tag列出所有的tag列表

    b263aaee2a0a6528d4ff55ede1e4f75a.png

    2.创建一个tag,使用git tag [name],我们新增一个 git tag 测试4,在使用git tag 查看一下

    4b1e4e2b5ccbc34d361435339def8a2c.png

    3.查看tag对应的commit信息,git show [tag名字],举个例子git show 测试1,上线之后如果有问题我们就可以根据 下图的commit id进行代码回滚

    fa92f17d2de3ef9d534d45ff077b7754.png

    结束

    git管理工具在我们日常中可以说是天天都在用,所以对于常见的问题场景对应的方法一定要牢牢地掌握免得遇到的时候显得捉襟见肘

    推荐学习:《Git教程

    以上就是带你搞懂git回滚代码(实例详解)的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:git
    上一篇:图文详解!搞懂Git工作原理 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • git怎样增加目录• git中pull是什么意思• git怎样恢复删除的远程分支• 9 款漂亮、功能强大的GitHub开源后台模板• 详解Composer+Git怎么创建 “服务类库”
    1/1

    PHP中文网