一、git reset
该命令有三种方式:
1. git reset –mixed
此为默认方式,不带任何参数的 git reset 即使用这种方式,它回退到某个版本,只保留源码,回退 commit 和 index 信息
比如,本地提交信息如下
执行 git reset --mixed HEAD^ 命令以后,本地提交信息如下
本地的源文件处于已修改待保存状态
2. git reset –soft
回退到某个版本,只回退了commit 的信息,不会恢复到 index file 一级。如果还要提交,直接commit即可
3. git reset –hard
彻底回退到某个版本,本地的源码也会变为上一个版本的内容
二、git revert
git revert 是用一个新提交来消除一个历史提交所做的修改
三、git reset 和 git revert 的区别
git revert 是用一次新的 commit 来回滚之前的 commit,git reset 是直接删除指定的 commit,看似达到的效果是一样的,其实完全不同。
第一:如果你已经 push 到线上代码库,reset 删除指定 commit 以后,你 git push 可能导致一大堆冲突,但是 revert 并不会。
第二:在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里,但是 revert 方向提交的commit 并不会出现在历史分支里。
第三:reset 是在正常的 commit 历史中,删除了指定的 commit,这时 HEAD 是向后移动了,而 revert 是在正常的 commit 历史中再 commit 一次,只不过是反向提交,他的 HEAD 是一直向前的。