如果你还不会用 git 回滚代码,那你一定要来看看
作者:零狐冲
https://juejin.cn/post/7046720828901163016
在日常coding的过程中免不了分支之间的合并,回滚、提交、打tag等操作,如果你现在还不知道怎么使用git工具回滚代码,或者总是担心出错没有把握怕把代码搞丢,这很危险毕竟代码搞丢是很大的事情小则扣绩效重则多扣点,但是 dont worry,你很幸运能看到这篇文章,当你看完以后就不会在有代码丢失的情况,因为我会带你手把手建分支模拟回滚的常见情况
------欲知后事如何,请看下文🔽
介绍
------来自百度百科
前言
git revert
和git 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
来进行操作我们在下面说
git log
查看commit可以看到目前只有一个刚才提交的commitmaster
分支迁出一个develop
分支git branch develop
,并且切换到该分支 git checkout develop
develop
分支新增一段代码,这个时候develop的commit记录就新增了一条B的记录注意这里有个问题当你进行分支合并的时候,有时候会发现虽然代码不一样但是在进行分支合并的时候就提示代码没有更新,就是因为当前的开发分支的commit记录是落后于要合并的目标分支的,造成这种情况的原因就是reset滥用造成的,所以reset一定要慎用
develop
分支的代码合并到master
,切换到master
分支 执行git merge develop
git log
查看commit记录找到B记录,准备回滚这一条,回滚的时候不需要输入全部的commid一般是前7位就够用git reset 69fde2c
进行回滚,这个时候查看log记录发现最后一条新增c
记录没有了,这里还有个问题如果直接使用git push
推送会有以下提示。这是因为本地的记录因为我们的回滚已经落后于仓库的代码了,这个使用需要使用 git push \-f
进行强制提交
revert介绍
1、revert的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险 2、revert可以抵消上一个提交,那么如果想要抵消多个需要执行 git revert 倒数第一个commit id 倒数第二个commit
3、这个就常用于当你提交了一次commit之后发现提交的可能有问题就可以用到revert 4、还有一种情景是已经有很多人提交过代码,但是想改之前的某一次commit记录又不想影响后面的也可以使用revert,他会把你后面提交的记录都放到工作区只是合并的时候需要注意一点 5、微信搜索readdot,关注后回复 视频教程 获取23种精品资料
git revert 16083ce
,如果你也用的是vs code可以看到工作区的变化,并且在控制台可以提交默认的commitRevert 新增C
,并且原来的新增C
还是在的commit记录打tag
1、在上线之前我们需要对当前的commit记录打一个tag方便上线的代码有问题可以及时回滚
git tag
列出所有的tag列表git tag [name]
,我们新增一个 git tag 测试4
,在使用git tag
查看一下git show [tag名字]
,举个例子git show 测试1
,上线之后如果有问题我们就可以根据 下图的commit id进行代码回滚结束
逆锋起笔
专注于程序员圈子,你不但可以学习到java
、python
等主流技术干货和N多个源码
分享,还可以第一时间获悉最新技术动态
、内测资格
、BAT大佬的经验
、精品视频教程
、副业赚钱
经验,微信搜索readdot
关注!
评论