Git 代码回滚操作

git reset的理解

git reset 直接把之前 commit 删掉,非 git reset --hard 的操作是不会删掉

git reset 参数定义

--soft 回退后分支修改的代码被保留并标记为add的状态(git status 是绿色的状态)
--mixed 重置索引,但不重置工作树,更改后的文件标记为未提交(add)的状态。默认操作。
--hard 重置索引和工作树,并且分支修改的所有文件和中间的提交,没提交的代码都被丢弃了。
--merge 和--hard类似,只不过如果在执行reset命令之前你有改动一些文件并且未提交,merge会保留你的这些修改,hard则不会。【注:如果你的这些修改add过或commit过,merge和hard都将删除你的提交】
--keep 和--hard类似,执行reset之前改动文件如果是分支修改了的,会提示你修改了相同的文件,不能合并。如果不是分支修改的文件,会移除缓存区。git status还是可以看到保持了这些修改。

git reset –-soft  [commit id] 提交回退到暂存区,修改记录保留
git reset –-mixed [commit id] 提交回退到工作区,修改记录保留
git reset –-hard  [commit id] 提交彻底回退,修改记录不保留

回退暂存区里的某个文件,回退到当前版本工作区状态
git reset HEAD [file]

回退倒数2个提交的修改,修改保留在暂存区,git执行垃圾回收时会删除
git reset HEAD~2

git revert 使用

Revert撤销一个提交的同时会创建一个新的提交。这是一个安全的方法,因为它不会重写提交历史

创建一个新的分支回退倒数2个提交的修改
git revert HEAD~2

git checkout 使用

把HEAD移动到特定的提交(倒数第2个提交)
git checkout HEAD~2

参考