git revert 与 git reset
Git版本回滚之 git revert 与 git reset
在使用 git 的时候,如果错误push之后,经常会回滚版本。
git的回滚有两种方式:
- revert命令:这种方式,是用一种反向的 push 来重新提交一次。git中可以看到操作记录。 
- reset命令:这个命令,是一种重置。即错误提交了,我要删除这个提交记录。也可以实现回滚。 
两个命令的对比:
revert 和 reset 看上去达到的效果是一样的,但其实是完全不同的过程。
- 如果已经 push 到线上代码库, reset 删除指定 commit 以后,再 git push 可能导致一大堆的冲突。但是 revert 并不会。 
- 如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里。但是 revert 反向提交的commit 并不会出现在历史分支里。 
- reset 是在正常的 commit 历史中,删除了指定的 commit,这时 HEAD 是向后移动了,而 revert 是在正常的 commit 历史中再 commit 一次,只不过是反向提交,他的 HEAD 是一直向前的。 
git reset 常用参数的理解

从上面这张图,可以直观的了解 git 的工作流程。
- 最初的状态是我们正在书写代码,这个状态对应图中的 Working diretory。这个时刻,我们的代码是独立的,跟 git 没有一点关系。
- 随后,我们把当前编辑的 A文件add到 git 中,这个时候就跟 git 发生了关系,git 接收了我们的代码。然后把这个文件存入了自己的暂存区 stage ,后面我们对这个文件的任何更改 ,git 都会知晓。这个状态对应图中的 Stage/Index。
- 我们把写好的 A文件commit到 git ,这就有了一次提交历史,对应图中的 History。在 git 中只要commit过的文件,都有各种方式可以恢复,基本来说,就是不会丢了。
随着项目的进行,我们发现代码写的不好,需要回退到上一次的提交,我们有几个命令可以选择。
常见以下三个命令:
- git reset --hard
- git reset --soft
- git reset --mixed
 
git reset --hard
这个命令非常危险 ,是 git 中少有的几个会丢失信息的操作。它会把回退点之前的所有信息都删掉,一个不留,干干净净。 
举个例子: 
现在我把 A 文件修改了两次,到了 C 状态 ,并且已提交。 
那么我的分支指针是指向 C , 当前文件编辑的状态也是在 C
(F)
A-B-C
↑
master
我输入了git reset --hard,结果会变成:
(F)
A-B
↑
master
对的, C 状态彻底没有,再也找不回来。所以,没事不要用这个命令。
git reset --soft
同样是这个状态:
(F)
A-B-C
↑
master
我输入了git reset --soft,结果是:
(F)
A-B-C
↑
master
文件状态与分支的指针都指向上一个提交,C 还是在的,只是没显示。
git reset --mixed
仍然是这个场景:
(F)
A-B-C
↑
master
我输入了 git reset --mixed,结果是:
(F)
A-B-C
↑
master
分支指针指向上次提交点,但是文件状态还是在当前文件 C ,我看到的现象就是 C 文件还在,但是没有 add ,是红色的。
可以看出,三个命令中 mixed 是最好的回退处理方式,其实这也是 git reset 的默认参数。
git revert 与 git reset的更多相关文章
- git revert 和 git reset的区别
		git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 * git revert HEAD ... 
- git的几种回滚 git revert 和 git reset的区别
		git的几种回滚 git revert 和 git reset的区别:强烈建议:对HEAD不熟的话最好不要用HEAD,直接用commitID吧,我遇到的问题:reset HEAD~1之后,可能是别人提 ... 
- git revert和git reset的区别
		git revert 是撤销某次操作,此次操作之前的commit都会被保留 git reset 是撤销某次提交,但是此次之后的修改都会被退回到暂存区 具体一个例子,假设有三个commit, git s ... 
- git revert .vs. git reset .vs. git rebase
		1. git rervert的工作方式是:将一个老的commit的改动完全找出来,并且在新的tip处运行反操作,最终清除老commit的改动: git revert的应用场景多在对public rep ... 
- 详解Git工作区、暂存区、历史记录区以及git reset、git revert、git checkout等撤销命令的区别
		http://josh-persistence.iteye.com/blog/2215214 
- git revert用法以及与git reset的区别
		git revert用法 git revert 撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 作为一次最新的提交 * git revert HEAD ... 
- git reset与git revert的区别
		http://alpha-blog.wanglianghome.org/2010/07/30/git-partial-rollback/ reset(版本撤回) 格式 git reset [-q] [ ... 
- git reset与git revert比較
		git reset git reset的作用是还原Index的状态或改动本地分支HEAD的位置. 这个命令适合用于从某个提交点又一次开新的分支.比方,假设某个提交之后的代码我们都不要了,就能够在本地r ... 
- git reset --hard和git revert命令
		git reset --hard和git revert命令 git误操作时可以用git reset –hard 去撤销这次修改, 但是这样做也有问题,可能在之前本地有没有提交的修改也都消失了, ... 
随机推荐
- apache Rewrite配置(转)
			1.Rewrite规则简介: Rewirte主要的功能就是实现URL的跳转,它的正则表达式是基于Perl语言.可基于服务器级的(httpd.conf)和目录级的 (.htaccess)两种方式.如果要 ... 
- CentOS7 更换阿里云源
			搭建opensack时原生的源不好使就换了个阿里云的源试试 百度搜到的方法:https://blog.csdn.net/chavo0/article/details/51939362 1.备份 # m ... 
- 配置SpringBoot方便的切换jar和war
			配置SpringBoot方便的切换jar和war 网上关于如何切换,其实说的很明确,本文主要通过profile进行快速切换已实现在不同场合下,用不同的打包方式. jar到war修改步骤 pom文件修改 ... 
- python学习——复习
			一.基础知识: 1.文件操作有哪些模式?请简述各模式的作用. 'r' 读模式,相应的方法有 read(),readline(),readlines() 'w' 写模式,相应的方法有 write(),w ... 
- Python写网络后台脚本
			Python写网络后台脚本. 首先安装Python3.6.5,在centos中自带的Python是2.6版本的,现在早就出现了3.6版本了况且2和3 之间的差距还是比较大的,所以我选择更新一下Pyth ... 
- 数据结构之 AVL个人笔记
			从这位前辈的博客园中学习的数据结构:https://www.cnblogs.com/skywang12345/ 非常感谢这位前辈. 以下文章摘录于 :skywang12345的博客园:转载请注明出处: ... 
- AtCoder Grant Contest 10.F  博弈
			题意:给定一棵树,每个节点有个权值,Alice和Bob轮流进行操作,给定游戏起点指针指向节点C.不断进行下述操作. 1.将当前节点权值-1,然后将指针从该节点移动到相邻节点,出现一方不能移动(即指针指 ... 
- windows下安装配置redis
			说明:本文拷贝自https://jingyan.baidu.com/article/0f5fb099045b056d8334ea97.html Redis是有名的NoSql数据库,一般Linux都会默 ... 
- Developing iOS 8 Apps with Swift (stanford)
			https://www.youtube.com/watch?v=JkiB8Zwk-9Q&index=2&list=PLcX0opNQliFl0RTGbY9HHWCFg0Q8_fIF4 
- 北京Uber优步司机奖励政策(3月10日)
			滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ... 
