这里讲一下git revert和git reset的区别: html
git revert 是撤销某次操做,这次操做以前的commit都会被保留 git
git reset 是撤销某次提交,可是这次以后的修改都会被退回到暂存区 spa
具体一个例子,假设有三个commit, git st: 3d
commit3: add test3.c htm
commit2: add test2.c blog
commit1: add test1.c 源码
当执行git revert HEAD~1时, commit2被撤销了 it
git log能够看到: test
commit1:add test1.c file
commit3:add test3.c
git st 没有任何变化
若是换作执行git reset --soft(默认) HEAD~1后,运行git log
commit2: add test2.c
commit1: add test1.c
运行git st, 则test3.c处于暂存区,准备提交。
若是换作执行git reset --hard HEAD~1后,
显示:HEAD is now at commit2,运行git log
commit2: add test2.c
commit1: add test1.c
运行git st, 没有任何变化
----------------------------------------------------------------------------------------------
另外,说一下git revert ,git reset –hard和 –soft的区别
git reset –mixed id ,是将git的HEAD变了(也就是提交记录变了),但文件并无改变,(也就是working tree并无改变)。
git reset –soft id. 实际上,是git reset –mixed id 后,又作了一次git add
git reset –herd id.是将git的HEAD变了,文件也变了。
git revert与git reset最大的不一样是,git revert 仅仅是撤销某次提交。
好比git revert HEAD~1 ,那么会撤销倒数第二次的提交结果。而倒数第一次的提交记录,仍然在。
若是git reset –hard HEAD~1,那么,commit退回到倒数第三次的状态中。
整体来说,仍是git revert 好啊,雁过留声嘛。
其实,经过git reset –soft id的方法,能够将原来屡次的git提交记录合并为一个。
git reset是指将当前head的内容重置,不会留log信息。
----------------------------------------------------------------------------------------------
根据–soft –mixed –hard,会对working tree和index和HEAD进行重置:
git reset -soft :取消了commit
git reset -mixed(默认) :取消了commit ,取消了add
git reset -hard :取消了commit ,取消了add,取消源文件修改
====
http://hi.baidu.com/lingzhixu/blog/item/569f45c4cbf39925f8dc619e.html