如果你还不会用git回滚代码,那你一定要来看看
如果你还不会用git回滚代码,那你一定要来看看
![如果你还不会用git回滚代码,那你一定要来看看](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951281-1618440310.webp)
在日常coding的过程中免不了分支之间的合并,回滚、提交、打tag等操作,如果你现在还不知道怎么使用git工具回滚代码,或者总是担心出错没有把握怕把代码搞丢,这很危险毕竟代码搞丢是很大的事情小则扣绩效重则多扣点,但是 dont worry,你很幸运能看到这篇文章,当你看完以后就不会在有代码丢失的情况,因为我会带你手把手建分支模拟回滚的常见情况
------欲知后事如何,请看下文🔽
复制代码
介绍
Git(读音为/gɪt/)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
------来自百度百科
复制代码
前言
在日常的代码回滚中常用的有两种方式git revert
和git reset
来进行回滚,这两种分别对应的不同的情况我尽量简单明了的介绍这两个命令都能做些什么,接下来我会从个人仓库新拉个分支从0开始,建两个分支,分别是主分支master
和开发分支develop
来进行模拟
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951289-1632112599.webp)
开始
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随便写点东西,之后提交到仓库
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951411-2124752404.webp)
3.我们在终端使用git log
查看commit可以看到目前只有一个刚才提交的commit
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951351-1004170063.webp)
4.我们从master
分支迁出一个develop
分支git branch develop
,并且切换到该分支 git checkout develop
5.在develop
分支新增一段代码,这个时候develop的commit记录就新增了一条B的记录
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951666-1070456217.webp)
6.在develop分支接着新增一段代码
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951397-1898059660.webp)
7.看下develop分支和master分支最新的commit记录对比,可以看到dev分支领先master分支两个commit
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951695-1723137148.webp)
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951377-533263545.webp)
注意这里有个问题当你进行分支合并的时候,有时候会发现虽然代码不一样但是在进行分支合并的时候就提示代码没有更新,就是因为当前的开发分支的commit记录是落后于要合并的目标分支的,造成这种情况的原因就是reset滥用造成的,所以reset一定要慎用
操作一下reset来感受一下
1.我们将develop
分支的代码合并到master
,切换到master
分支 执行git merge develop
2.我们在master分支使用git log
查看commit记录找到B记录,准备回滚这一条,回滚的时候不需要输入全部的commid一般是前7位就够用
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951649-558882230.webp)
3.重点来了我们使用git reset 69fde2c
进行回滚,这个时候查看log记录发现最后一条新增c
记录没有了,这里还有个问题如果直接使用git push
推送会有以下提示。
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951404-788555237.webp)
这是因为本地的记录因为我们的回滚已经落后于仓库的代码了,这个使用需要使用
git push -f
进行强制提交
4.这个时候master分支就剩下A和B的commit记录了,到这里就是一次完整的reset回滚记录,之后我们还是可以继续正常把develop分支合并到master的
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951418-1244237731.webp)
revert介绍
1、revert的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险
2、revert可以抵消上一个提交,那么如果想要抵消多个需要执行
git revert 倒数第一个commit id 倒数第二个commit
3、这个就常用于当你提交了一次commit之后发现提交的可能有问题就可以用到revert
4、还有一种情景是已经有很多人提交过代码,但是想改之前的某一次commit记录又不想影响后面的也可以使用revert,他会把你后面提交的记录都放到工作区只是合并的时候需要注意一点
我们来模拟一下环境
1.切到develop分支现在该分支有三个commit记录
2.我们使用rever进行回滚试一下git revert 16083ce
,如果你也用的是vs code可以看到工作区的变化,并且在控制台可以提交默认的commit
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951401-934184324.webp)
3.看一下log记录,可以看到新增了一个记录Revert 新增C
,并且原来的新增C
还是在的
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951352-1158692687.webp)
commit记录打tag
1、在上线之前我们需要对当前的commit记录打一个tag方便上线的代码有问题可以及时回滚
我们来介绍一下常用的几个命令
1.git tag
列出所有的tag列表
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951657-2097309967.webp)
2.创建一个tag,使用git tag [name]
,我们新增一个 git tag 测试4
,在使用git tag
查看一下
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951415-1000145268.webp)
3.查看tag对应的commit信息,git show [tag名字]
,举个例子git show 测试1
,上线之后如果有问题我们就可以根据 下图的commit id进行代码回滚
![](https://img2022.cnblogs.com/blog/1369022/202206/1369022-20220617004951622-1168606709.webp)
结束
git管理工具在我们日常中可以说是天天都在用,所以对于常见的问题场景对应的方法一定要牢牢地掌握免得遇到的时候显得捉襟见肘