##使用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是一直向前的。

转载于:https://www.cnblogs.com/zichuan/p/10314065.html

git回滚命令reset、revert的区别相关推荐

  1. git-代码撤销、回滚到任意版本(git回滚命令reset、revert的区别)

    文章目录 一.Git 代码撤销.回滚到任意版本(当误提代码到本地或master分支时) 二.git回滚命令reset.revert的区别 1. 背景知识 2. 方法一:git reset(回退) 3. ...

  2. Git 回滚命令笔记

    Git 回滚命令 一.未提交 未提交有以下两种情况: 1)已经在工作区修改了文件,但还未执行 git add 提交到暂存区. 2)已经执行了 git add 提交到暂存作,但还未执行 git comm ...

  3. Git 回滚 checkout、reset、revert

    Git 回滚 checkout.reset.revert 首先看一下 Git 的工作流程 checkout 是检出的意思,作用是将某次 commit 的状态检出到工作区,它的过程是先将 HEAD 指向 ...

  4. 1.2 git回滚操作

    1.远程仓库中有的文件,但是本地要给删除掉,如何同步 git ls-files //查看暂存区是否有该文件,以readme.md为例 git rm -r --cached readme.md //删除 ...

  5. Git回滚版本并push到远端master

    办法一. [Gitlab]GIT回滚master分支到指定tag版本 并提交远程仓库 1 查看分支 git branch 2 切换到master分支 git checkout master 3 查看标 ...

  6. 【Gitlab】GIT回滚master分支到指定tag版本 并提交远程仓库

    [Gitlab]GIT回滚master分支到指定tag版本 并提交远程仓库 1 查看分支 git branch 2 切换到master分支 git checkout master 3 查看标签 git ...

  7. Git 回滚Rollback

    Git 回滚Rollback 撤销修改 撤销修改 工作区放弃修改 use "git checkout -- <file>..." to discard changes ...

  8. git 回滚/撤回提交代码、误删、误提交恢复

    git回滚找回代码 上情况 情况1 git pull的时候发生冲突,修改失误,并commit了,怎么恢复? 查看所有的commit提交日志,并获取提交id git log commit 0992046 ...

  9. 在idea中纯界面进行git回滚操作

    在idea中git回滚操作 红色:工作区 绿色:缓存区 白色:已提交(本地版本库或者远程版本库) 通常我们都是在缓存区中写代码 第一步:reset到回滚的版本 找到需要回滚的版本,将代码重置到需要回滚 ...

最新文章

  1. JS 截取字符串及字符与数字转换
  2. Hadoop 统计单词字数的例子
  3. Bumblebee微服务网关之并发限制
  4. 关于软件测试学习心得
  5. 信息学奥赛一本通 1178:成绩排序 | OpenJudge NOI 1.10 03:成绩排序
  6. struct对象可能分配在托管堆上吗
  7. 24.猫狗数据自定义训练
  8. FTP服务器FileZilla Server配置及使用方法
  9. ipad使用计算机的图片大全,三种方式备份 iPad 照片
  10. CCIE一年后的心语-------寄WOLF实验室的兄弟
  11. echarts散点图x轴和y轴在中间位置
  12. 1.2 Eight Great Ideas in computer Architecture
  13. 会员卡应用管理系统源码 支持收银+积分管理+商城营销功能 含详细搭建教程
  14. mysql 查询最多的_MySQL中用通用查询日志找出查询次数最多的语句的教程
  15. 我的大学六年-郭天祥
  16. OpenStack创建,分发并初始化rings
  17. echarts环形图内实现自定义添加文字数字和缩放自适应
  18. 【tio-websocket】4、tio-websocket-server实现自定义集群模式
  19. 七律---观三国有感
  20. 【快速入门】创建你的第一个linux程序(详细教程)

热门文章

  1. MyBatis系列之浅谈SQL执行流程分析
  2. python 监控内存_使用python写一个监控不同机器的使用内存情况并使用flask出图
  3. asp.net mvc3 利用Ajax实现局部刷新
  4. 依赖注入[5]: 创建一个简易版的DI框架[下篇]
  5. 无线网络的基础及优化方案
  6. SSH Secure Shell Client中文乱码的解决办法
  7. 【高斯消元】bzoj1013 [JSOI2008]球形空间产生器sphere
  8. go 设置进程名_七天用Go写个docker(第六天)
  9. openresty安装(centos)
  10. vs2015软件系统开源_2015年开源亮点的多样性