Git之reset和revert的区别......呱~
2018-02-12 本文已影响8人
tobbyvic
- 首先讲一下reset
首先看一下git的指向(HEAD)
正常情况下指向是随着每次commit向前走的
![](https://img.haomeiwen.com/i2026091/7e5e6b0bbb3dfa6c.jpg)
如图,此时如果执行
git reset --hard HEAD^
这句话便是reset到HEAD的上一个commt,就会变成下面这样
![](https://img.haomeiwen.com/i2026091/dfd910f26564ad95.jpg)
此时即便是git log也只有
$ git log
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date: Tue Aug 20 14:53:12 2013 +0800
add distributed
commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date: Mon Aug 19 17:51:55 2013 +0800
wrote a readme file
这两个。。
大致原理如图:
![](https://img.haomeiwen.com/i2026091/8241da67e81b7dd2.jpg)
到4的时候git log 只有1、2、3'、4
- 下面来讲一下revert
![](https://img.haomeiwen.com/i2026091/c38885fce9925ce6.jpg)
下面举一个栗子
首先,建立一个新的resposity然后进行第一次commit
![](https://img.haomeiwen.com/i2026091/d7bac41279e180a9.jpg)
然后再进行两次commit
![](https://img.haomeiwen.com/i2026091/ad4bed00c831387b.jpg)
此时的git log 就是三个commit
![](https://img.haomeiwen.com/i2026091/a23e7be1b0b7583d.jpg)
然后revert 第二个 commit
就是在软件里点击revert即可,如图所示
![](https://img.haomeiwen.com/i2026091/d2a3ccd0eab1f2e2.jpg)
然后会出现让你进行merge
![](https://img.haomeiwen.com/i2026091/0e17eea44039bafd.jpg)
此时文件的状态是这样的
![](https://img.haomeiwen.com/i2026091/00fb18ba37e88944.jpg)
这时merge的话删除
<<<<<<< HEAD
这是第一个commit
这是第二个commit
这是第三个commit
=======
以及最后一句即可
这一段即可,这是软件提示的
然后便如我们所说的,2、3的commit都被复原了,文件变成了
这是第一个commit
这时删除完不进行更改的话,可以直接commit,然后文件就是
这是第一个commit
此时git log的话 有1、2、3、还有最后这一次commit 这4个 HEAD还是一直向前