赞
踩
在日常coding的过程中免不了分支之间的合并,回滚、提交、打tag等操作,如果你现在还不知道怎么使用git工具回滚代码,或者总是担心出错没有把握怕把代码搞丢,这很危险毕竟代码搞丢是很大的事情小则扣绩效重则多扣点,但是
dont worry,你很幸运能看到这篇文章,当你看完以后就不会在有代码丢失的情况,因为我会带你手把手建分支模拟回滚的常见情况
在日常的代码回滚中常用的有两种方式 git revert
和 git reset
来进行回滚,这两种分别对应的不同的情况我尽量简单明了的介绍这两个命令都能做些什么,接下来我会从个人仓库新拉个分支从0开始,建两个分支,分别是主分支master和开发分支 dev 来进行模拟
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来进行操作我们在下面说
从你自己的git仓库创建一个新项目之后拉到本地
创建一个index.js随便写点东西,之后提交到仓库
我们在终端使用 git log
查看commit可以看到目前只有一个刚才提交的 commit
我们从master分支迁出一个dev分支git branch dev,并且切换到该分支git checkout dev
(或者 git checkout -b dev
)
在develop分支新增一段代码,这个时候develop的commit记录就新增了一条B的记录
在dev分支接着新增一段代码
看下dev分支和master分支最新的commit记录对比,可以看到dev分支领先master分支两个commit
我们将 dev 分支的代码合并到master,切换到master分支 执行git merge --no-ff dev
我们在master分支使用 git log 查看commit记录找到B记录,准备回滚这一条,回滚的时候不需要输入全部的commid一般是前7位就够用
重点来了我们使用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、revert的原理是,在当前提交后面,新增一次提交,抵消掉上一次提交导致的所有变化。它不会改变过去的历史,所以是首选方式,没有任何丢失代码的风险
2、revert可以抵消上一个提交,那么如果想要抵消多个需要执行 git revert 倒数第一个commit id 倒数第二个commit
3、这个就常用于当你提交了一次commit之后发现提交的可能有问题就可以用到revert
4、还有一种情景是已经有很多人提交过代码,但是想改之前的某一次commit记录又不想影响后面的也可以使用revert,他会把你后面提交的记录都放到工作区只是合并的时候需要注意一点
master 分支有四次提交记录,分别涉及两个 js 文件,index.js 和 index02.js。
后期发现 B 记录有误,使用 reset 回退会把相应的index02.js 文件提交记录也删除。
但又不想删除后边index02.js的提交记录,这时可以使用 revert
使用 revert 回滚
因为你回滚的是 “新增BBB” 的记录,所以 index02 文件及内容不会删除,。但是 index01 文件会有冲突,采取 Income ,就只剩下 “新增BBB” 之前的内容
1、在上线之前我们需要对当前的commit记录打一个tag方便上线的代码有问题可以及时回滚
git tag 列出所有的tag列表
创建一个tag,使用git tag [name] ,我们新增一个 git tag v1.0 ,在使用git tag 查看一下
查看tag对应的commit信息,git show [tag名字] ,举个例子git show v1.0 ,上线之后如果有问题我们就可以根据 下图的commit id进行代码回滚
将本地标签推送到线上
本文参考:https://mp.weixin.qq.com/s/cVWlranbwImAwNtLKQYHqg
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。