##使用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的区别的更多相关文章

  1. Git 回滚操作之 revert

    https://blog.csdn.net/HobHunter/article/details/79462899 https://blog.csdn.net/secretx/article/detai ...

  2. git代码回滚:Reset、Checkout、Revert的选择

    代码回滚:Reset.Checkout.Revert的选择 Zhongyi Tong edited this page on Dec 8, 2015 · 5 revisions Pages 19 Ho ...

  3. 代码回滚:Reset、Checkout、Revert的选择

    代码回滚:Reset.Checkout.Revert的选择 Git仓库有三个主要组成——工作目录,缓存区和提交历史. 从图中我们可以看出,缓存区或者叫索引,其实是指一整套即将被下一个提交的文件集合.也 ...

  4. git回滚

    Git回滚的常用手法 07net01.com 发布于 4小时前 评论 传统VCS的回滚操作 对于版本控制系统VCS来说,回滚这个操作应该是个很普通也是很重要的需求. 如果你是传统VCS,比如SVN或者 ...

  5. Git回滚代码暴力法

    Git回滚有多种方式,这里使用的是[强制提交到远程分支] 效果为:如回滚前的提交记录是 1.2.3.4,使用这种方法回滚到2,那么提交记录就变成了1.2. 操作方法: 需要在本地的Git仓库,右键选择 ...

  6. Git回滚代码

    回滚命令: 1.回退到上个版本 $ git reset --hard HEAD^ 2.回退到前2次提交之前,以此类推,回退到n次提交之前 $ git reset --hard HEAD~2 3.退到/ ...

  7. git merge 撤销与git 回滚

    git merge提交后恢复 http://blog.psjay.com/posts/git-revert-merge-commit/ git回滚 https://www.jianshu.com/p/ ...

  8. 代码回滚:Reset、Checkout、Revert 的选择

    git reset.git checkout 和 git revert 是你的 Git 工具箱中最有用的一些命令.它们都用来撤销代码仓库中的某些更改,而前两个命令不仅可以作用于提交,还可以作用于特定文 ...

  9. git 回滚方式

    git push 命用于从将本地的分支版本上传到远程并合并. 命令格式如下: git push <远程主机名> <本地分支名>:<远程分支名> 如果本地分支名与远程 ...

随机推荐

  1. 第二十九天- socketserver模块 ftp上传

    1.socketserver模块: socketserver,它提供了服务器中心类,可简化网络服务器的开发,内部使用IO多路复用以及“多线程”和“多进程”,从而实现并发处理多个客户端请求的socket ...

  2. Spring boot初入门

    1. Spring的Java配置方式 Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1. @Configuration 和 @Bean Spring的Java配置方式是 ...

  3. <Android 基础(三十五)> RecyclerView多类型Item的正确实现姿势

    简介 RecyclerView是我们开发过程中经常使用到的一个元素,原生的RecyclerView.Adapter基本上可以满足一般的需求,关于RecyclerView的基础介绍请移步: Recycl ...

  4. PeopleSoft单点登录工作原理

    单点登录是指用户在仅通过一次身份验证后,可以在多个应用程序中自由切换. 这意味着用户只需要一次登录信息,只要他点击指向其他应用程序的链接,安全信息就会自动从一个应用程序传递到另一个应用程序,用户就不会 ...

  5. 对Controller的单元测试

    在ASP.NET MVC项目的Controller中存在逻辑代码,也需要单元测试.查阅到的资料上,有说ASP.NET MVC框架在设计时便考虑到了满足可测试性,所以相对aspx.Winform来说针对 ...

  6. [我的阿里云服务器] —— WorkPress

    前言: WordPress是基于PHP和MYSQL编成的一套博客系统,因此一般会选择LAMP环境来让它最稳定地运行, 这里的LAMP指的是Linux.Apache.MySQL.PHP,我们我的阿里云服 ...

  7. 【Python】zlib压缩文件

    import zlib import os ss = 's' * 1024 * 1024 #写入原始文件 file = open("src.dat", "wb" ...

  8. MySQL 性能监控4大指标——第一部分

    [编者按]本文作者为 John Matson,主要介绍 mysql 性能监控应该关注的4大指标. 第一部分将详细介绍前两个指标: 查询吞吐量与查询执行性能.文章系国内 ITOM 管理平台 OneAPM ...

  9. Python数据类型之list和tuple

    list是一种有序的集合,可以随时添加和删除其中的元素. 用len()函数可以获得list元素的个数. 用索引来访问list中每一个位置的元素,索引是从0开始的.如果要取最后一个元素,除了计算索引位置 ...

  10. 【mongoDB运维篇③】replication set复制集

    介绍 replicattion set 多台服务器维护相同的数据副本,提高服务器的可用性,总结下来有以下好处: 数据备份与恢复 读写分离 MongoDB 复制集的结构以及基本概念 正如上图所示,Mon ...