作用:将当前 HEAD 重置为指定状态
Git 的四个区域
- Workspace:工作区,就是你平时存放项目代码的地方;
- Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息,一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);
- Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本;
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换;
常用命令
命令一
git reset [--soft | --mixed [-N] | --hard | --merge | --keep] [-q] [<commit_id> | HEAD^]
-  –soft 不删除工作区改动代码,撤销 commit,不撤销git add .。会在重置 HEAD 和 branch 时,保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。 
-  –mixed 这是默认动作。 重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。 
-  –hard 重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。 
-  –merge 撤销合并(merge)/修订(commit)/变基(rebase)操作,在需要提供ORIG_HEAD(git log 获取的 commit_id)。 - 在执行撤销合并/ 变基时,效果等同于撤销合并(git merge --abort)/撤销变基(git rebase --abort)。
- 在执行修订,效果等同于强制撤销(git reset --hard <commit_id>)
 
-  –keep 重置分支到指定的提交,保留当前工作目录和暂存区的更改。若重置Reset节点内容与工作目录和暂存区内容存在冲突时,该命令无法执行。 
命令二
git reset (--patch | -p) [<tree-ish>] [--] [<pathspec>...]
使用**-p交互性的有选择性地对块进行reset**,这是与git add -p相反的。
命令三
git reset [-q] [<tree-ish>] [--] <pathspec>...
git reset [-q] [--pathspec-from-file=<file> [--pathspec-file-nul]] [<tree-ish>]
匹配pathspec所有路径重置索引条目到git 树的状态。
选项
-  [-q, --quiet, --no-quiet] 安静的执行,只报告错误 
-  [–pathspec-from-file=] 从文件读入命令行参数 
-  --pathspec-file-nul在**–pathspec-from-file**模式换行符指定为NUL 
-  <pathspec>...指定操作的路径或者文件。 
-  <commit_id>代表某个版本的 commit_id,可通过 git log 或在 git 平台的 history 中查看。 
-  HEAD^ 代表HEAD上一个版本,也可以写成 HEAD~1。如果进行了 2 次 commit,想都撤回,可以使用 HEAD~2。 
参考
git-reset Document
 Git Reset:撤销与回溯,解读5种模式的妙用