当前位置:   article > 正文

如果你还不会用 git 回滚代码,那你一定要来看看_git revert

git revert

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

前言

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

开始

reset 介绍

1、reset 的作用是当你希望提交的commit从历史记录中完全消失就可以用
2、比如你在master分支提交了A-->B-->C提交了三个记录,这个时候如果C记录有问题你想回滚到B就可以用git reset进行
3、这个命令大概率的情况都是用在我们主分支的,因为我们上线的分支一般是master分支然后从 dev 进行功能开发
4、开发完成之后将分支合并到master,如果在上线之前发现合并的分支用问题可以将 dev 合并过来的分支进行回滚
5、说白了就是取消 dev 的本次合并
6、但是有一种情况就是协作开发的时候大家都合并到 master 之后就不能用reset强行回滚commit因为这样会把其他人的提交记录给冲掉,这时候就可以用revert来进行操作我们在下面说

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

  2. 创建一个index.js随便写点东西,之后提交到仓库
    在这里插入图片描述

  3. 我们在终端使用 git log 查看commit可以看到目前只有一个刚才提交的 commit
    在这里插入图片描述

  4. 我们从master分支迁出一个dev分支git branch dev,并且切换到该分支git checkout dev
    (或者 git checkout -b dev )

  5. 在develop分支新增一段代码,这个时候develop的commit记录就新增了一条B的记录
    在这里插入图片描述

  6. 在dev分支接着新增一段代码
    在这里插入图片描述

  7. 看下dev分支和master分支最新的commit记录对比,可以看到dev分支领先master分支两个commit
    在这里插入图片描述
    在这里插入图片描述

操作一下reset来感受一下
  1. 我们将 dev 分支的代码合并到master,切换到master分支 执行git merge --no-ff dev

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

  3. 重点来了我们使用git reset c0e9b29dd573 进行回滚,这个时候查看log记录发现最后一条新增c记录没有了,这里还有个问题如果直接使用git push 推送会有以下提示。
    在这里插入图片描述
    这是因为本地的记录因为我们的回滚已经落后于仓库的代码了,这个使用需要使用 git push -f master 进行强制提交。

注意:
其实在这里,使用完 git reset [HEAD] 之后,本地代码还是没有回退回去呢,需要在本地编辑器将代码这里撤销一下。这是因为 git reset [HEAD] 是将暂存区域和HEAD的提交保持一致

在这里插入图片描述

或者将以上 git reset [HEAD] 命令替换成 git reset --hard [HEAD],这样本地代码会同步变化,因为 git reset --hard [HEAD] 是将工作区、暂存区和HEAD保持一致。在这里使用 git reset --hard [HEAD] 之后,其实可以直接 push ,不用 push -f

  1. 这个时候master分支就剩下A和B的commit记录了,到这里就是一次完整的reset回滚记录,之后我们还是可以继续正常把dev分支合并到master的
    在这里插入图片描述
revert 介绍

1、revert的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险
2、revert可以抵消上一个提交,那么如果想要抵消多个需要执行 git revert 倒数第一个commit id 倒数第二个commit
3、这个就常用于当你提交了一次commit之后发现提交的可能有问题就可以用到revert
4、还有一种情景是已经有很多人提交过代码,但是想改之前的某一次commit记录又不想影响后面的也可以使用revert,他会把你后面提交的记录都放到工作区只是合并的时候需要注意一点

操作一下revert来感受一下
  1. master 分支有四次提交记录,分别涉及两个 js 文件,index.js 和 index02.js。
    后期发现 B 记录有误,使用 reset 回退会把相应的index02.js 文件提交记录也删除。
    但又不想删除后边index02.js的提交记录,这时可以使用 revert
    在这里插入图片描述

  2. 使用 revert 回滚
    在这里插入图片描述

  3. 因为你回滚的是 “新增BBB” 的记录,所以 index02 文件及内容不会删除,。但是 index01 文件会有冲突,采取 Income ,就只剩下 “新增BBB” 之前的内容
    在这里插入图片描述

commit记录打tag

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

我们来介绍一下常用的几个命令
  1. git tag 列出所有的tag列表
    在这里插入图片描述

  2. 创建一个tag,使用git tag [name] ,我们新增一个 git tag v1.0 ,在使用git tag 查看一下
    在这里插入图片描述

  3. 查看tag对应的commit信息,git show [tag名字] ,举个例子git show v1.0 ,上线之后如果有问题我们就可以根据 下图的commit id进行代码回滚
    在这里插入图片描述

  4. 将本地标签推送到线上
    在这里插入图片描述

本文参考:https://mp.weixin.qq.com/s/cVWlranbwImAwNtLKQYHqg

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/638473
推荐阅读
相关标签
  

闽ICP备14008679号