Git 后悔药 reset 的 hard, soft, mixed

基本操作

修改了工作区(未 add),想丢弃修改

git checkout -- <filename>
git checkout . // . 丢弃所有修改

已经add想撤回(到还未add的状态) (HEAD 可以换成你想要的版本)

git reset HEAD <filename>

已经 commit 想回到之前版本

  • --hard 是默认参数,可以说省略
#回退到最新版本(上次commit后最干净的状态)
git reset --hard
#回退到上一版
git reset --hard HEAD^
#回退到倒数第二版
git reset --hard HEAD^^
#回退到commit id为 xxxxxx 的版本
git reset --hard xxxxxx

利用检出 checkout 实现撤销工作区

  • checkout 就是从直接从版本库中拉接一份下来,覆盖本地

撤销所未提交的修改,但不包括新增的文件

git checkout .    

撤销对指定文件的修改,[filename]为文件名

git checkout [filename]    
git reset <commit-id>  #默认就是 --mixed参数。
git reset --hard <commit-id>  #回退到指定commit-id,清空暂存区和工作区。
git reset --soft HEAD~3  #回退至三个版本之前,工作区保持不变。回退前后差异放在暂存区。
git reset --mixed HEAD^  #回退至上个版本。 把缓存区修改移到工作区。最终所有的修改都保留在工作区。

应用场景

hard

一刀两断,回到从前。工作区、暂存区的内容统统丢掉。

soft

  • 合并多个commit
    例如:有一整块相对独立的逻辑代码,我分成了 n 次提交。为了洁癖,想把它们合并成一个 commit 。假如当前工作区暂存区都是干净的。那么先get reset --soft然后直接commit就OK了。

mixed(默认)

  1. soft相似的情况合并commit,只不过因为修改都堆在工作区,所以要多一步add . 然后再commit
  2. 第二种情形Unstage,有时add .后悔了,可以 reset --mixed 退到某个版本或git reset 撤销某个文件。
  3. commit内容错了,不想修改后再commit一次(那样会保留错误commit的历史)。使用reset --mixed 回到先前正确的版本,在工作区修改正确后commit
    如果想保留历史可以使用revert详见参考资料

参考资料

hard, soft, mixed 的区别
Git的基本概念/常用命令及实例
Git官网 Book: 2.4 Git 基础 - 撤消操作
Git 两瓶后悔药的区别 reset、revert

有所帮助的话,请笨笨喝杯茶吧 ——有助笨茶
在这里插入图片描述

你可能感兴趣的:(Git)