一张图说明 git reset 与 git revert 的区别:
当 HEAD 指向 commit 1 时,分别使用git reset [commit0 id] --hard
和 git revert [commit0 id]
命令会产生如下区别:
- 使用 reset 后,会直接清除 commit 1 的记录。
- 使用 revert 后,会用 commit 0 新增一次 commit,并且该分支之前的 commit 都会被保留。
git reset
git reset 命令有4个可选参数,分别是:
- soft,回退到指定 commit,并且该 commit 之后的提交都将变为 add 后的状态
- mixed,回退到指定 commit,并且该 commit 之后的提交都将变为没有 add 的状态
- hard,回退到指定 commit,并且该 commit 之后的提交都将舍弃
- keep ,回退到指定 commit,并且该 commit 之后的提交都将舍弃。但是,本地修改的代码将保留
git revert
git revert 到指定 commit 后,会直接用该 commit 版本的代码覆盖当前代码,并新增一次commit。