Git中是有“后悔药”的,当我们想回退到之前的状态时,总有办法可以做到。这里来比较一下两个常见的回退命令:git reset
和git revert
。
一、reset
git reset
命令实际上有诸多选项,这里仅以--hard
为例,即git reset --hard
。假设目前提交情况如图:
目前 HEAD 指针指向 2ab7 的commit,即目录的状态位于 2ab7;当运行命令git reset --hard e02f
时,HEAD 指针则移动到对应位置:
所以此时目录的状态随即改变,位于 e02f 的commit id处。
二、revert
假设目前提交状况如下:
现在运行git revert
,那么 git 会撤销上一次的修改,并把此次的撤销做一次提交,也就是 HEAD指针依旧会向前推进:
从文件的角度来说,此时文件的内容,和 e02f 处的内容一致,跟 git reset --hard
带来的结果完全一样。但 git 本身没有后退,而是新创建了一个提交。