git回滚命令reset、revert的区别
##使用git,总有一天会遇到下面的问题:
(1)改完代码匆忙提交,上线发现有问题,怎么办? 赶紧回滚。
(2)改完代码测试也没有问题,但是上线发现你的修改影响了之前运行正常的代码报错,必须回滚。
所以git的取消提交、回退甚至返回上一版本是比较重要的。
大致分为下面2种情况:
1、没有push
这种情况发生在你的本地代码仓库,可能你add、commit以后发现代码有点问题,准备取消提交,用reset
git reset \--soft | --mixed | --hard
参数说明:
--soft:保留源码,只回退commit信息到某个版本,不涉及index的回退。如果还需要提交,直接commit即可。
--mixed:会保留源码,只是将git commit和index的信息回退到了某个版本。(git reset默认的就是--mixed模式,即git reset等价于git reset --mixed)
--hard:源码也会回退到某个版本,commit和index都会回退到某个版本。(注意这种方式是会改变本地代码仓库源码)
当然有人在push代码以后,也使用 reset --hard 回退代码到某个版本之前。但是这样会有一个问题,你线上的代码没有变,线上commit、index都没有变,当你把本地代码修改完提交的时候你会发现全是冲突........所以,这种情况你要使用下面的方式
2、已经push
对于已经把代码push到线上仓库,你回退本地代码其实也想同时回退线上代码,回滚到某个指定的版本,让线上、线下代码保持一致,用revert。
git revert用于反转提交,行evert命令时要求工作树必须是干净的。
git revert用一个新提交来消除一个历史提交所做的任何修改。
revert之后你的本地代码会回滚到指定的历史版本,这时你再git push就可以把线上的代码更新。(这里不会像reset造成冲突的问题)
revert的使用,需要先找到你想回滚版本唯一的commit标识代码,可以用git log或者在adgit搭建的web环境历史提交记录里查看。
git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61
通常,前几位即可
git revert c011eb3
综上,git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。看似达到的效果是一样的,其实完全不同:
1、上面我们说的如果你已经push到线上代码库,reset删除指定commit以后,你git push可能导致一大堆冲突,但是revert 不会。
2、如果在日后现有分支和历史分支需要合并的时候,reset恢复部分的代码依然会出现在历史分支里,但是revert方向提交的commit并不会出现在历史分支里。
3、reset是在正常的commit历史中,删除了指定的commit,这时HEAD是向后移动了。而revert是在正常的commit历史中再commit一次,只不过是反向提交,它的HEAD是一直向前的。
git回滚命令reset、revert的区别的更多相关文章
- Git 回滚操作之 revert
https://blog.csdn.net/HobHunter/article/details/79462899 https://blog.csdn.net/secretx/article/detai ...
- git代码回滚:Reset、Checkout、Revert的选择
代码回滚:Reset.Checkout.Revert的选择 Zhongyi Tong edited this page on Dec 8, 2015 · 5 revisions Pages 19 Ho ...
- 代码回滚:Reset、Checkout、Revert的选择
代码回滚:Reset.Checkout.Revert的选择 Git仓库有三个主要组成——工作目录,缓存区和提交历史. 从图中我们可以看出,缓存区或者叫索引,其实是指一整套即将被下一个提交的文件集合.也 ...
- git回滚
Git回滚的常用手法 07net01.com 发布于 4小时前 评论 传统VCS的回滚操作 对于版本控制系统VCS来说,回滚这个操作应该是个很普通也是很重要的需求. 如果你是传统VCS,比如SVN或者 ...
- Git回滚代码暴力法
Git回滚有多种方式,这里使用的是[强制提交到远程分支] 效果为:如回滚前的提交记录是 1.2.3.4,使用这种方法回滚到2,那么提交记录就变成了1.2. 操作方法: 需要在本地的Git仓库,右键选择 ...
- Git回滚代码
回滚命令: 1.回退到上个版本 $ git reset --hard HEAD^ 2.回退到前2次提交之前,以此类推,回退到n次提交之前 $ git reset --hard HEAD~2 3.退到/ ...
- git merge 撤销与git 回滚
git merge提交后恢复 http://blog.psjay.com/posts/git-revert-merge-commit/ git回滚 https://www.jianshu.com/p/ ...
- 代码回滚:Reset、Checkout、Revert 的选择
git reset.git checkout 和 git revert 是你的 Git 工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文 ...
- git 回滚方式
git push 命用于从将本地的分支版本上传到远程并合并. 命令格式如下: git push <远程主机名> <本地分支名>:<远程分支名> 如果本地分支名与远程 ...
随机推荐
- Dynamics 365Online 通过插件中的retrievemultiple消息来过滤产品视图
本篇中要讲的是对产品视图基于某个条件进行过滤显示,而手段就是通过插件中的retrievemultiple消息,可能很多人都写过对它都不陌生. 先来看张插件注册的截图,插件的message是retrie ...
- SD从零开始13-14
SD从零开始13 使用条件记录(Working with Condition Records) 定价报表—客户特定价格Pricing Reports-customer-specific prices ...
- 企业如何选择合适的BI工具?
在没认清现状前,企业当然不能一言不合就上BI. BI不同于一般的企业管理软件,不能简单归类为类似用于提高管理的ERP和WMS,或用于提高企业效率的OA.BPM.BI的本质应该是通过展现数据,用于加强企 ...
- SQLite 数据库增删改查
布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...
- Vue + WebPack + Typescript初学者VSCode项目 (按需加载、跨域调试、await/async)
万事开头难,一个好的Hello World程序可以节省我们好多的学习时间,帮助我们快速入门.Hello World程序之所以是入门必读必会,就是因为其代码量少,简单易懂.但我觉得,还应该做到功能丰富, ...
- mui中图片手势缩放功能的实现
MUI框架,要实现手势缩放图片,可以使用imageviewer组件来实现.代码很简单: 引入css: <link href="assets/css/mui.imageviewer.cs ...
- 【Redis】Redis学习(六) Redis 基本运维
Redis的单机搭建,主从搭建,Sentinal搭建,以及Redis集群搭建的步骤参照前面的文章.现在来说一下Redis的基本运维,毕竟如果一切正常是最好的,但是当出现问题不能使用的时候,准确定位问题 ...
- [JAVA] 重写以及@Override标签
以前JAVA看的少,最近做项目,对@Override的调用顺序有点疑惑,故查了一些资料.既然查资料了,那就把能看到的知识点整理一下,以供日后学习. 原文地址请保留http://www.cnblogs. ...
- linux 查找匹配文件中包含指定字符的 前五行,这里是指所有匹配的前五行
最近被问到 一个关于查找匹配字符的信息显示问题: 系统/etc/sysctl.conf文件会定义系统内核的一些配置,请查找和net有关的信息,并只打印前面5行信息. 解决方式大概试两种写法均可: 1. ...
- Java:运算符的问题
算术运算符: 算术运算符的注意问题 1. 如果对负数取模,可以把模数负号忽略不记,如:5%-2=1.但被模数是负数就另当别论. -5%3=-2:-5%-3=-2:符号跟被模数(左边). 2. 对于除号 ...