前言
在Git的命令行中,版本回退有 git reset 和 git revert 两种,以下是两种版本回退的介绍以及区别。
一、git reset
先看下面一张图:
从图中我们可以理解为,git reset 在进行版本回退后,它是回滚到回退后的commit-id那个版本,也就是我们进行回退后的那个版本,就如图中,我们使用 gti reset 命令后,我们会从commit 3 回退到 commit 1 ,而在commit 1 之后提交的所有记录都会被删除,并且它不会产生新的commit记录。
举个例子:
这个是写的一个例子
此时,我执行版本回退的命令,
$ git reset --hard HEAD^
然后执行
$ git log
可以看到回退到 “2-提交”,
而我之前的 “2-bbbb”,那条记录是看不见的,也就是,在执行完 git reset 后,“2-bbbb" 那条记录被删除了。
二、git revert
git revert 和 git reset 就不同,revert是撤销上次的提交,但是,它会再生成一条新的记录。
还是拿个例子来说一下
此时,如果我执行:
$ git revert --hard HEAD
就会出现,如下图图示:
按下键盘的 i 键,我们就可以在里面进行输入,在这里我们需要输入注释,输入注释后,按下 Esc 键,然后在按下 :键,再按下 wq 就可以退出。
此时,在执行
$ git log
可以看到
图中可以看出,我们是想要回退到 ”2-add“那个版本,但是在执行 git revert 命令后,我们增加了一条记录,而且,我们输入的注释也在记录中可看见。
总结
git reset 是回滚到对应的commit-id,相当于是删除了commit-id以后的所有的提交,并且不会产生新的commit-id记录
git revert 是反做撤销其中的commit-id,然后重新生成一个commit-id。本身不会对其他的提交commit-id产生影响
虽然,git reset 和 git revert 执行后记录不一样,但是,执行完命令后,在工作区展示的内容是一样的。