工作中我们时常会遇到回滚代码的需求
分两种情况,push上去了,和没有push(只是commit/add了)
如果没有push上去,命令是 git reset,如果push上去了使用git revert
git reset 的功能是回退本地的代码,并不会改变线上的代码,git reset 有3个参数可用
1.git reset --mixed +版本号 暂存区(add区)和提交区(commit区)会回退到某个版本,本地的代码不会改变。
2.git reset --soft +版本号 提交区(commit区)会回退到某个版本,暂存区(add区)不会回退,本地代码不变。
3.git reser --hard +版本号 暂存区(add区)和提交区(commit区)会回退到某个版本,本地的代码会改变。
git revert 的功能是回退线上代码
git revert +版本号 -》输入commit的message,生成一个新的commit,-》push 覆盖线上的版本
这样就完成了线上版本的回退
git revert 的快捷命令
git revert HEADE 回退到上一次提交的版本
git revert HEADE^ 回退到上上次提交的版本
下面介绍用命令行回滚和用sourceTree回滚代码
我在工作中使用sourceTree工具,如果想把本地代码重置到某一次提交,可以在想回到的版本的位置右键,选择右键菜单中的‘将xxx重置到这次提交’,
在提示框中点击确定,此时本地仓库中的代码回退到了选中的版本中,也就相当于commit之前,然后在‘文件状态中’出现了你的本地代码和本地仓库中的代码不同的部分,也就相当于你现在在本地代码中修改的部分。
分支旁边也会出现箭头
向下的箭头表示你本地的代码和线上仓库中的代码有7处差别
此时如果想放弃本地代码的更改,使用线上仓库的代码版本,可以选中文件,右键,在右键菜单中选择‘重置’
在弹出的确认框中点击确定,此时就放弃了你本地代码的更改,现在‘拉取’线上代码
就会同步线上仓库的代码到本地,此时本地仓库的代码和线上仓库就版本一致了。
命令行的回滚 git reset --hard 465dd43
在分支旁边显示和线上版本的差距,此时‘拉取’,就会同步本地的代码为线上代码的版本。
以上这些都是适用于coomit之后,push之前,想回退commit的内容的场景,线上仓库的代码版本是没有回退的,回退的只是本地仓库的版本
如果想回滚线上仓库的版本怎么办呢?
先说命令行的方式 git revert +版本号 意思是回退xxx版本提交的修改,也只会回退xxx版本提交的修改,如果最新版本和xxx版本之间还间隔着其他版本的修改,其他版本的修改是不会回退的。
如果回退的时候出现冲突,如下图,需要手动解决冲突,再commit
之后执行git push ,完成线上版本的回退
再来看sourceTree,在想要回滚的版本位置右键-选择提交回滚,如果有冲突需要手动解决,然后push,完成线上版本的回退
有点啰嗦地整理完了,希望对日后地工作有帮助
原文地址:https://www.cnblogs.com/lijianjian/p/9636339.html