##使用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. Flask中request参数

    首先要明确一件事,Request这是个对象,不管使用PHP还是python还是什么java语言,虽然request这个对象可能叫的名字不一样,(在其他语言中可能叫什么HttpRequest),但是原理 ...

  2. Linux 安装redis,redis发布订阅,持久化

    安装redis 1.安装redis的方式 -yum (删除这个yum安装的redis,我们只用源码编译安装的) -rpm -源码编译 2.删除原本的redis yum remove redis -y ...

  3. CentOS7部署Django项目

    1. 云服务器 这里使用的是腾讯云选择系统:CentOS7.3 记住云服务器登录密码 2. 配置Python3环境 默认Python环境为python2.7,yum安装是需要python2的环境的 安 ...

  4. django-缓存的应用

    为什么需要缓存? django中文文档: 通常,计算值是昂贵的(即资源匮乏和缓慢),因此将值保存到可快速访问的缓存中可以有巨大的好处,为下一次需要做好准备. 这是一个足够重要和强大的技术,Django ...

  5. 【代码笔记】iOS-屏幕根据键盘自动的变化高度

    一,效果图. 二,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIViewContro ...

  6. Excel indirect引用其它xlsx文件内容作为下拉框

    效果如下图: 在第一个excel文件中有一个下拉框 这里面的选项,需要从另外一个Excel文件中读取内容,另外一个Excel文件如下: 实现的步骤如下: 1.新建一个Excel文件select.xls ...

  7. php对文件的操作

    如何让自己磁盘中的文件夹和目录显示在网页上?那就来看一下,用php是怎么来操作他们的吧 php中文件,一般包含两块内容,文件和目录先来一句一句的看代码,及他的作用 运行后看一下结果 file 指的是文 ...

  8. android展示注册进度效果源码

  9. Permission denied (publickey),Gitlab & Github 多ssh key 冲突 导致的权限问题

    Github 多ssh key导致的权限问题 :Permission denied (publickey) 公司用gitlib搭建了git服务器,自己已有github账号,用ssh-keygen分别生 ...

  10. Asp.Net Core Docker镜像更新系统从wheezy改为stretch

    之前写过一个在Asp.Net Core里调用System.Drawing.Common绘图的DEMO,部署到Docker里运行,需要更新Asp.Net Core镜像的操作系统. https://www ...